在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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章