46

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

4

9 回答 9

27

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

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

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

于 2009-06-30T15:57:33.347 回答
16

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

javac -cp ".;mina.jar" MyRtmpClient.java
于 2009-06-30T15:56:28.433 回答
11

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

javac -cp ".;*" MyRtmpClient.java

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

为了特别方便,包含 * 基名的类路径元素被认为等同于指定目录中所有文件的列表,扩展名为 .jar 或 .JAR。

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

于 2013-07-05T14:39:43.413 回答
9

如果您有实用程序find并且tr可以随意使用(例如,您正在使用 Linux),您可以这样做:

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

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


解释:

  • 一对反引号 ( ` ) 表示要执行的 shell 命令,
  • find * -name "*.jar"查找并列出层次结构中根为当前文件夹的所有jar文件,
  • 竖线 ( | ) 是管道;将输出连接find到下一个命令的输入,
  • tr "\n" ":"冒号字符替换所有换行符
于 2012-12-29T16:48:30.070 回答
8

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

请试试:

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

cd @PROJECT_PATH

javac -classpath lib\a.jar src\package\b.java
于 2011-08-05T07:38:36.327 回答
4

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

javac -cp ".;first.jar;second.jar;third.jar" MyRtmpClient.java
于 2012-04-13T18:21:24.333 回答
2

在 Java 8 中,上面提到的“.;*”等选项似乎不起作用。我试过了,发现: javac -cp '<location of jars>/*' MyRtmpClient.java

作品:

<location of jar>可以是 /usr/local/classes/* 或 /home/developer/MyProject/*

于 2017-12-08T16:02:17.430 回答
-2

尝试在命令行中包含 jar 文件,这样:

javac MyRtmpClient.java ByteBuffer.jar

于 2009-06-30T15:54:11.100 回答
-2

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

于 2012-02-03T05:58:13.087 回答