在linux中指定classpath * .jar时无法添加多个jar

时间:2013-09-30 13:34:38

标签: java linux jar classpath

在编译项目时,我在指定multiple.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

不,为什么?

2 个答案:

答案 0 :(得分:4)

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

-classpath .:../lib/*  

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

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

“了解类路径通配符”

  

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

答案 1 :(得分:3)

您需要引用*,以便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。