编译时如何通配符包含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
(假设其他设置是正确的)。