2011-11-30 108 views
1

我在stackoverflow上看到了几个非常类似的问题,但没有遇到任何完全符合我的问题的东西。我有一个包含多个.java文件的文件夹,另一个文件夹包含两个.jar文件。我需要包括jar文件,同时使用javac从而使整个项目被一气呵成编译:classpath中的多个jar不起作用

$: javac -classpath .:~/myjardir/*.jar ~/myprojectdir/*.java 

但如果我这样做,只有第一个罐子是公认的,并且依赖于第二罐子一切抛出一个错误。令人惊讶的是,如果我分别编译每个程序,

$: javac -classpath .:~/myjardir/oneofthejars.jar ~/myprojectdir/file1.java 

然后一切工作正常。我也在Eclipse中分别编译了该项目,以测试代码和jar。只有当我尝试在命令行中使用-classpath的罐子时,我才会收到错误。通配符条目应该在JDK6中起作用,所以我在这里处于困境。

+0

我建议你使用像'ant'或'maven'这样的构建工具来跟踪你的依赖并执行你的构建。使用通配符的AFAIK适用于JVM的类路径,但它可能不适用于Windows中的'javac' –

回答

1

看到the SO answer here但这里是从Java文档的相关段落:

类路径条目可包含基名通配符*,这被认为等同于指定与该目录中的所有文件的列表扩展名.jar或.JAR。例如,类路径条目foo/**指定名为foo的目录中的所有JAR文件。一个仅包含*的类路径条目展开为当前目录中所有jar文件的列表。

1

类路径通配符不像Unix shell中那样工作。 *表示目录中名为*.jar的所有内容。所以你不需要做*.jar,而只需要*。以下应该做你想要什么:

$: javac -classpath .:~/myjardir/* ~/myprojectdir/*.java 

Understanding class path wildcardsJava SE 6 documentation

+0

Esp,您需要添加双引号:javac -cp“.. \ lib \ *”test \ wc \ MyCode。 java的 –

0

如果你想在一个类路径中有多个东西,你必须按照我所知的方法通过类路径分隔符来区分它们。所以./lib:/lib/mylib在unix系统上是一个有效的类路径,我认为在Windows系统上等同于\ lib; \ lib \ mylib。您不必指定每个文件,只需指定目录。