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

46 java packages compilation jar

我在java文件(MyRtmpClient.java)中有以下内容:

import org.apache.mina.common.ByteBuffer;
Run Code Online (Sandbox Code Playgroud)

并且ByteBuffer位于JAR文件中(当然具有正确的目录结构).我需要的jar文件和其他文件与.java文件位于同一目录中.

然后我用这行编译:

javac -cp ".;*.jar" MyRtmpClient.java
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

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

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

cd1*_*cd1 26

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

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

我假设JAR文件具有正如您所述的正确目录结构.


Mar*_*ark 16

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

javac -cp ".;mina.jar" MyRtmpClient.java
Run Code Online (Sandbox Code Playgroud)


Mac*_*tys 10

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

javac -cp ".;*" MyRtmpClient.java
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 8

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

请试试:

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

cd @PROJECT_PATH

javac -classpath lib\a.jar src\package\b.java
Run Code Online (Sandbox Code Playgroud)


ple*_*siv 7

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

javac -cp .:`find * -name "*.jar" | tr "\n" ":"` MyRtmpClient.java
Run Code Online (Sandbox Code Playgroud)

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


说明:

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