在linux中指定类路径* .jar时无法添加多个jar [重复]

Posted

技术标签:

【中文标题】在linux中指定类路径* .jar时无法添加多个jar [重复]【英文标题】:Unable to add multiple jars when specifying classpath *.jar in linux [duplicate] 【发布时间】:2013-10-06 09:36:53 【问题描述】:

当我编译我的项目时,我在指定多个.jar 文件时遇到了一些问题。我几乎可以肯定:

sudo javac -classpath .:../lib/*.jar server/*.java models/*.java authentication/*.java database/*.java

会起作用的。就像 .java 文件一样。但事实并非如此。

我刚刚意识到我必须将每个 .jar 指定如下:

sudo javac -classpath .:../lib/gson-2.2.4.jar:../lib/mysql-connector-java-5.1.26-bin.jar server/*.java models/*.java authentication/*.java database/*.java

那么,每次我需要一个新的 .jar 时,我真的必须在我的 run.sh shell 代码中添加一个新的 .jar 吗?

总结问题:

-classpath .:../lib/gson-2.2.4.jar:../lib/mysql-connector-java-5.1.26-bin.jar

有效。

-classpath .:../lib/*.jar

没有,为什么?

【问题讨论】:

【参考方案1】:

你不需要指定 *jar 你只需要这样的东西:

-classpath .:../lib/*  

添加所有罐子。 (没有 .jar 后缀) 请阅读

http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/classpath.html

“理解类路径通配符”

例如,类路径条目 foo/* 指定名为 foo 的目录中的所有 JAR 文件。仅由 * 组成的类路径条目将扩展为当前目录中所有 jar 文件的列表。无论文件是否隐藏(即名称以“.”开头),都将被考虑。

【讨论】:

【参考方案2】:

你需要引用*,这样shell就不会扩展它。

#this doesn't work:
javac -classpath .:../lib/*.jar ...

#the above expands to (notice the space between the jar files):
javac -classpath .:../lib/jar1.jar ../lib/jar2.jar ...

#this should work:
javac -classpath '.:../lib/*' ...

您希望 javac 解释“*”,而不是 shell。

【讨论】:

我有一个命令java -classpath /jars/*:/anotherJarsDir/* com.test.MyClass 没有任何引号,它工作正常。我想知道为什么 shell 不扩展它并出错?

以上是关于在linux中指定类路径* .jar时无法添加多个jar [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在另一个 XIB 中指定类时如何使用 Custom View.xib 加载自定义视图?

LabelEncoder 在 DataFrame 中指定类

在命令行上将多个 jar 添加到类路径 [重复]

无法在 Intellij 中指定主要清单属性

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

java - 如何在Java文件中指定相对文件路径,以便将文件放入jar文件后仍然可以工作?