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

时间:2009-06-30 15:49:36

标签: java jar compilation packages

我在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文件?

9 个答案:

答案 0 :(得分:26)

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

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

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

答案 1 :(得分:16)

javac不理解classpath参数中的* .jar。您需要明确指定每个jar。 e.g。

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

答案 2 :(得分:9)

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

javac -cp ".;*" MyRtmpClient.java

引用javac - Java programming language compiler

  

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

     

例如,如果目录foo包含a.jar和b.JAR,则类路径元素foo / *将扩展为A.jar; b.JAR,但jar文件的顺序未指定。指定目录中的所有jar文件,甚至是隐藏的文件都包含在列表中。简单地由*组成的类路径条目扩展为当前目录中所有jar文件的列表。

答案 3 :(得分:8)

在你的情况下,我认为JAVAC无法找到jars文件。

请尝试:

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

cd @PROJECT_PATH

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

答案 4 :(得分:7)

如果您可以使用实用程序findtr(例如,您正在使用Linux),则可以执行以下操作:

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

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

<小时/> 说明:

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

答案 5 :(得分:4)

下面的语法可能适用于windows dos命令

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

答案 6 :(得分:1)

在Java 8中,选项&#34;。; *&#34;上面提到的等似乎不起作用。我试过并发现: <location of jar>

工作:

{{1}}可以是/ usr / local / classes / *或/ home / developer / MyProject / *

答案 7 :(得分:-2)

尝试在命令行中包含jar文件,以便:

javac MyRtmpClient.java ByteBuffer.jar

答案 8 :(得分:-2)

您不能将-cp Javac 一起使用。您必须改为使用-classpath(假设其他设置正确)。

相关问题