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

the*_*net 19 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
Run Code Online (Sandbox Code Playgroud)

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

当我使用javac而不是Eclipse IDE时,为什么它找不到罐子?

Mic*_*rdt 17

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

请参阅javac命令参考(windows).


Dom*_*kis 14

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

javac -cp "lib/" Example.java将加载所有.class文件lib/.
javac -cp "lib/\*" Example.java将加载所有.jar文件lib/,但不加载.class文件.
javac -cp "lib/;lib/\*" Example.java将加载所有.jar.class文件lib/.

笔记:

  • *上面示例中使用的(通配符)字符被转义(请注意\之前的内容*).\是为了bash,如果你正在使用别的东西,它可能会有所不同.你想逃避它,因为java sdk实用程序,比如javac,他们自己解释通配符的方式.据我所知(纠正我,如果我错了),Windows命令行不会扩展,*所以你不需要逃避它:-cp lib\*应该没问题.
  • ;分隔路径,如下所示javac -cp ".;a/;b/;c/" Example.java- 这将加载.class以下目录中的文件:当前目录,a,b和c.
  • 使用分隔符(;)时,使用引号(如示例中)围绕类路径.