Java 如何在类路径中使用通配符添加多个JAR?

Java 如何在类路径中使用通配符添加多个JAR?,java,classpath,wildcard,Java,Classpath,Wildcard,我使用了太多的第三方库(jar文件),以至于我的类路径完全混乱,因为我必须为我使用的每个jar文件包含路径 我一直想知道是否有一种方法可以使用通配符(*)操作符(如*.jar)将所有jar文件包含在一个文件夹中。但它似乎不起作用。有没有其他方法可以缩短当前看起来像文章的类路径;)在我的电脑上?来自: 类路径项可以包含basename通配符*,这被认为等同于指定目录中所有文件的扩展名为.jar或.jar的列表。例如,类路径条目foo/*指定名为foo的目录中的所有JAR文件。仅由*组成的类路径项扩

我使用了太多的第三方库(jar文件),以至于我的类路径完全混乱,因为我必须为我使用的每个jar文件包含路径

我一直想知道是否有一种方法可以使用通配符(*)操作符(如*.jar)将所有jar文件包含在一个文件夹中。但它似乎不起作用。有没有其他方法可以缩短当前看起来像文章的类路径;)在我的电脑上?

来自:

类路径项可以包含basename通配符
*
,这被认为等同于指定目录中所有文件的扩展名为.jar或.jar的列表。例如,类路径条目
foo/*
指定名为foo的目录中的所有JAR文件。仅由
*
组成的类路径项扩展为当前目录中所有jar文件的列表

这应该在Java6中工作,但不确定Java5是否可以


(如果它似乎没有如预期的那样工作,请尝试使用引号。例如:
“foo/*”

Basename通配符是在Java6中引入的;i、 e.“foo/*”表示“foo”目录中的所有“.jar”文件


在不支持通配符类路径的早期Java版本中,我求助于使用shell包装器脚本来组装类路径,方法是将模式“全局化”,并将结果弄乱,以便在适当的位置插入“:”字符。这在BAT文件中是很难做到的…

如果您的意思是有一个名为CLASSPATH的环境变量,我会说这是您的错误。我在任何开发Java的机器上都没有这样的东西。类路径与特定的项目紧密相连,因此不可能有一个适用于所有项目的单一、正确的类路径

我使用IDE或Ant为每个项目设置类路径。我做了很多web开发,所以每个WAR和EAR都使用自己的类路径

IDE和应用服务器忽略了它。你为什么有它?我建议删除它。

这在Windows上有效:

java -cp "lib/*" %MAINCLASS%
其中
%MAINCLASS%
当然是包含main方法的类

或者:

java -cp "lib/*" -jar %MAINJAR%

其中,
%MAINJAR%
是要通过其内部清单启动的jar文件。

TFM说,在Java 1.5或更早版本中无法执行此操作。省时提示:将“*”(加上周围的双引号)而不仅仅是“*”,以使其工作(至少在Windows上)。:)为了扩展@Amos,对于Java1.7、Groovy2.1.5和windowsXP,我不得不使用-cp“/*”。常见的错误是使用了“foo/*.jar”,这是行不通的。仅适用于“foo/*”在windows下不适用于java 8,但在星号前加反斜杠而不是斜杠时也适用:请参见windows上的类路径中可能存在通配符问题:我无法找到替代方法-jar应该重写-cp,而且即使类路径不在jar清单中,它似乎也会这样做。如果您想包括工作目录和lib,这似乎是可行的:
java-cp.\*;lib\*%MAINCLASS%
基于替代方案的整个问题不工作也请注意:多个通配符可能出现在单个类路径声明中,并且可能与其他非通配符元素组合,例如,
java-cp“lib/*;lib2/*;lib3/specific.jar;config/
注意,将JAR和其他文件(如.class.properties.xml)添加到类路径是完全不同的。下面添加了主类所在的jar和在执行过程中从cp
java-cp上的当前目录调用的一些属性文件;%JAVA\u HOME%/jre/lib/“*com.some.package.ClassContainingMain
。“*;”号part只处理当前目录和“.”中的jarpart负责处理所有其他需要的.properties文件和类似文件。替代方案显然是错误的。使用
-jar
时,忽略
-cp
参数。