是否有一种方法将所有jar文件包含在类路径的目录中?

我正在尝试java -classpath lib/*.jar:。program,它不能找到在这些罐子里的类文件。我是否需要将每个jar文件分别添加到类路径中?


当前回答

这不是一个能够将/*设置为-cp的直接解决方案,但我希望您可以使用下面的脚本来缓解动态类路径和lib目录的情况。

 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并创建一个类路径字符串,并将其导出到一个env变量“tmpCLASSPATH”。

其他回答

来自wepapp的类:

  > mvn clean install

  > java -cp "webapp/target/webapp-1.17.0-SNAPSHOT/WEB-INF/lib/tool-jar-1.17.0-SNAPSHOT.jar;webapp/target/webapp-1.17.0-SNAPSHOT/WEB-INF/lib/*" com.xx.xx.util.EncryptorUtils param1 param2

对我来说,这适用于窗户。

java -cp "/lib/*;" sample

linux

java -cp "/lib/*:" sample

我使用的是Java 6

对于windows,引号是必需的,并且;应作为分离器使用。例如:

java -cp "target\\*;target\\dependency\\*" my.package.Main

请注意,在Windows上的Java 7中,通配符展开被打破了。

查看这个StackOverflow问题以获得更多信息。

解决方法是在通配符后面加一个分号。Java -cp " where/*;"

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