编译时如何通配符包含JAR文件?

我有一个Java文件(MyRtmpClient.java)中的以下内容:

import org.apache.mina.common.ByteBuffer; 

ByteBuffer在JAR文件里(当然有适当的目录结构)。 那个jar文件和我需要的其他文件和.java文件在同一个目录下。

然后我用下面这行来编译:

 javac -cp ".;*.jar" MyRtmpClient.java 

但是我得到的错误:

MyRtmpClient.java:3: package org.apache.mina.common does not exist
import org.apache.mina.common.ByteBuffer;

我如何在我的项目中包含jar文件?

你的命令行是正确的,但有一些注意事项:

  • 您必须具有javac> 1.6,因为只有在该版本中编译器才会将“*”parsing为各种JAR文件。
  • 你必须运行Windows,因为“;” 是仅用于该操作系统的path分隔符(它在Unix上不起作用,Unix上的path分隔符是“:”)。

我假设JAR文件具有正确的目录结构。

javac不理解类path参数中的* .jar。 你需要明确指定每个jar。 例如

 javac -cp ".;mina.jar" MyRtmpClient.java 

在javac JDK 6及以上版本中可以使用( 注意缺less.jar ):

 javac -cp ".;*" MyRtmpClient.java 

引用javac – Java编程语言编译器

作为一种特别的方便,包含基本名称*的类path元素被认为等同于指定具有扩展名.jar或.JAR的目录中的所有文件的列表。

例如,如果目录foo包含a.jar和b.JAR,那么类path元素foo / *将展开为A.jar; b.JAR,不同之处在于未指定jar文件的顺序。 列表中包含指定目录中的所有jar文件,甚至隐藏的文件。 一个由*组成的类path条目将展开为当前目录中所有jar文件的列表。

在你的情况下,我觉得JAVAC找不到jar文件。

请尝试:

PROJECT_PATH
– lib \ a.jar
– src \ package \ b.java

 cd @PROJECT_PATH javac -classpath lib\a.jar src\package\b.java 

如果你有公用事业(例如你正在使用Linux),你可以这样做:

 javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.java 

当前目录中的所有jar文件及其所有子目录将被添加(shell命令列出所有jar文件并将冒号作为分隔符)。


说明:

  • ` )表示要执行的shell命令,
  • find * -name "*.jar"查找并列出根目录为当前文件夹的所有jar文件,
  • 竖条( | )是pipe道; 将find输出连接到下一个命令的input,
  • tr "\n" ":"冒号字符replace所有换行符

可能下面的语法将工作在Windows DOS命令

 javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java 

尝试在你的命令行中包含jar文件,所以:

javac MyRtmpClient.java ByteBuffer.jar

Javac不能使用-cp 。 你必须改用-classpath (假设其他设置是正确的)。