如何在类路径中使用通配符来添加多个 jar? [复制]

Posted

技术标签:

【中文标题】如何在类路径中使用通配符来添加多个 jar? [复制]【英文标题】:How to use a wildcard in the classpath to add multiple jars? [duplicate] 【发布时间】:2010-11-17 05:59:42 【问题描述】:

我一直在使用如此多的 3rd 方库(jar 文件),以至于我的 CLASSPATH 完全搞砸了,因为我必须包含我使用的每个 jar 文件的路径。

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

【问题讨论】:

Windows 上的类路径中可能存在通配符问题:***.com/questions/11607873/… 【参考方案1】:

发件人:http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html

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

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

(如果它似乎没有按预期工作,请尝试加引号。例如:"foo/*"

【讨论】:

TFM 说您不能在 Java 1.5 或更早版本中执行此操作。 省时提示:放置“*”(带有双引号)而不是 * 以使其正常工作(至少在 Windows 上)。 :) 只是为了扩展@Amos,对于 java 1.7、groovy 2.1.5 和 windowsXP,我不得不使用 -cp "./*"。 常见的错误是放“foo/*.jar”,那是行不通的。仅适用于“foo/*” 不适用于 windows 下的 java 8,但如果反斜杠位于星号而不是斜杠之前,则可以:请参阅 bugs.openjdk.java.net/browse/JDK-8131329【参考方案2】:

这适用于 Windows:

java -cp "lib/*" %MAINCLASS%

%MAINCLASS% 当然是包含你的 main 方法的类。

或者:

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

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

【讨论】:

我找不到工作的替代方案。 -jar 应该覆盖 -cp 并且似乎这样做,即使 Class-Path 不在 jar 清单中。如果您想包含工作目录和 lib,这似乎可行:java -cp ".\*;lib\*" %MAINCLASS% 整个问题基于替代方法不起作用here 另请注意:多个通配符可能出现在单个类路径声明中,并且可能与其他非通配符元素组合,例如java -cp "lib/*;lib2/*;lib3/specific.jar;config/ 请注意,将 jars 和其他文件(如 .class .properties .xml)添加到类路径是完全不同的野兽。下面添加了主类所在的 jar 和一些在执行期间从 cp java -cp .;*;"%JAVA_HOME%/jre/lib/"* com.some.package.ClassContainingMain 上的当前目录调用的属性文件。这 '*;'部分只处理当前目录中的 jars 和 '.;'部分负责所有其他需要的 .properties 文件等 另一种选择是完全错误的。使用-jar 时,-cp 参数将被忽略。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

Java 6 中引入了基本名称通配符;即“foo/*”表示“foo”目录中的所有“.jar”文件。

在不支持通配符类路径的早期 Java 版本中,我使用了一个 shell 包装脚本来组装一个类路径,方法是 'globbing' 一个模式并修改结果以在适当的点插入 ':' 字符。这在 BAT 文件中很难做到……

【讨论】:

以上是关于如何在类路径中使用通配符来添加多个 jar? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java操作oracle数据库提示:不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,问题处理

Java操作oracle数据库提示:不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,问题处理

Java操作oracle数据库提示:不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,问题处理

为类路径设置文件夹[重复]

问题Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK