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

我在编译我的项目时遇到了一些指定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 

不,为什么?

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

 -classpath .:../lib/* 

添加所有的罐子。 (不包括.jar后缀)请阅读

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

“了解课程路径通配符”

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

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