如何让javac找到JAR文件? (Eclipse可以看到它们)

时间:2011-08-24 21:24:31

标签: java eclipse classpath

当我在Eclipse中时,我的项目编译没有错误,但是当我尝试使用javac进行编译时,它说我错过了一些包...

我复制了我的编译命令和下面的一些错误文本:

javac -classpath lib/ -d bin/ src/*.java
src/Cleaner.java:5: package net.sourceforge.jgeocoder does not exist
src/MyUtilities.java:19: package org.apache.commons.codec.binary does not exist

在Eclipse中,我已将所有.JAR文件添加到构建路径中,并且程序编译得很好。

为什么在使用javac而不是Eclipse IDE时找不到jar?

2 个答案:

答案 0 :(得分:17)

-classpath lib/会导致javaclib中查找类文件树。如果您有JAR存档,则必须使用-classpath lib/*.jar - 并且可能使用CLI在*上的任何转义机制,以确保它达到javac而不是通过CLI扩展

请参阅javac command reference (windows)

答案 1 :(得分:13)

现有的答案,虽然信息丰富,仍然让我感到疑惑,不得不重温javac -classpath文档。以下是您可能想要了解的内容的修订版:

javac -cp "lib/" Example.java将加载.class中的所有lib/个文件 javac -cp "lib/\*" Example.java会在.jar中加载所有lib/个文件,但不会加载.class个文件。
javac -cp "lib/;lib/\*" Example.java会在.jar中加载所有.classlib/个文件。

注意:

  • 上述示例中使用的*(通配符)字符已转义(请注意\之前的*)。 \用于bash,如果您正在使用其他内容,则可能会有所不同。你想逃避它,因为java sdk实用程序,如javac,他们自己解释通配符的方式。据我所知(如果我错了,请更正我),Windows命令行不会展开*,所以你不需要逃避它:-cp lib\*应该没事。
  • ;分隔路径,如javac -cp ".;a/;b/;c/" Example.java中所示 - 这会在以下目录中加载.class个文件:当前目录,a,b和c。
  • 使用分隔符(;)时,用引号括起类路径(如示例中所示)。