在编译项目时,我在指定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
不,为什么?
答案 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。