2

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

没有,为什么?

4

2 回答 2

4

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

-classpath .:../lib/*  

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

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

“理解类路径通配符”

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

于 2013-09-30T13:49:56.257 回答
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。

于 2013-09-30T14:35:14.853 回答