将目录中的所有Jar包包含在Java类路径中

1177

有没有一种方法可以在类路径中包含目录内的所有jar文件?

我正在尝试使用java -classpath lib/*.jar:. my.package.Program,但它无法找到肯定在这些jar文件中的类文件。我需要单独将每个jar文件添加到类路径中吗?


4
抱歉,我从未接受过这个。应该是一个社区维护的Wiki页面。我从未使用过提供的任何答案。我相信我创建了一个Shell脚本,只需扫描lib/目录并通过解析文件名来创建类路径。 - Chris Serra
这个新的Java特性存在某种错误,因为它不能按照描述的那样工作。我放弃了并使用Ant来解决它,正如其中一个答案所描述的那样。 - Alex R
1
Windows中通配符处理存在问题。 http://stackoverflow.com/questions/11607873/escape-wildcard-processing-in-java-classpath/11608165#comment15368871_11608165 - Mike
起初我以为 jar: 后面的 . 是错误的,但是...... 在 Unix 和 Windows 系统中,“当前目录”的标准符号是一个单点 (.)。 - KNU
8
简短回答:(1)去掉“.jar”这一部分,(2)在Windows上必须至少有两个部分,用“;”分隔(在其他地方通常是“:”)。例如: java -classpath ".;lib/*" Program - Evgeni Sergeev
非常抱歉,由于这是一个热门问题,我无法提出自己的问题,因此我正在寻求Java专家回答在此处flag create与create new之间的区别。https://github.com/frohoff/jdk8u-jdk/blob/master/src/solaris/classes/sun/nio/fs/UnixChannelFactory.java - Sagar Kharab
25个回答

2

虽然不能直接将 /* 设置为 -cp,但我希望您可以使用以下脚本来简化动态类路径和库目录的情况。

 libDir2Scan4jars="../test";cp=""; for j in `ls ${libDir2Scan4jars}/*.jar`; do if [ "$j" != "" ]; then cp=$cp:$j; fi; done; echo $cp| cut -c2-${#cp} > .tmpCP.tmp; export tmpCLASSPATH=`cat .tmpCP.tmp`; if [ "$tmpCLASSPATH" != "" ]; then echo .; echo "classpath set, you can now use  ~>         java -cp \$tmpCLASSPATH"; echo .; else echo .; echo "Error please check libDir2Scan4jars path"; echo .; fi; 

该脚本可以用于Linux系统,也可以为Windows系统编写类似的脚本。如果将正确的目录作为输入提供给“libDir2Scan4jars”,该脚本将扫描所有的jar包并创建一个classpath字符串,并将其导出到一个环境变量“tmpCLASSPATH”中。


2

将jar文件视为目录结构的根。是的,你需要单独添加它们。


1

设置类路径以适应多个jar和当前目录的类文件。

CLASSPATH=${ORACLE_HOME}/jdbc/lib/ojdbc6.jar:${ORACLE_HOME}/jdbc/lib/ojdbc14.jar:${ORACLE_HOME}/jdbc/lib/nls_charset12.jar; 
CLASSPATH=$CLASSPATH:/export/home/gs806e/tops/jconn2.jar:.;
export CLASSPATH

1

我在一个文件夹中有多个jar包。以下命令适用于JDK1.8,可包含文件夹中的所有jar包。请注意,如果类路径中有空格,请将其包含在引号中。

Windows

编译:javac -classpath "C:\My Jars\sdk\lib\*" c:\programs\MyProgram.java

运行:java -classpath "C:\My Jars\sdk\lib\*;c:\programs" MyProgram

Linux

编译:javac -classpath "/home/guestuser/My Jars/sdk/lib/*" MyProgram.java

运行:java -classpath "/home/guestuser/My Jars/sdk/lib/*:/home/guestuser/programs" MyProgram


0

java命令的参数顺序也很重要:

c:\projects\CloudMirror>java Javaside -cp "jna-5.6.0.jar;.\"
Error: Unable to initialize main class Javaside
Caused by: java.lang.NoClassDefFoundError: com/sun/jna/Callback

对比

c:\projects\CloudMirror>java -cp "jna-5.6.0.jar;.\" Javaside
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接