如何在类路径中使用通配符来添加多个 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