当我在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?
答案 0 :(得分:17)
-classpath lib/
会导致javac
在lib
中查找类文件树。如果您有JAR存档,则必须使用-classpath lib/*.jar
- 并且可能使用CLI在*上的任何转义机制,以确保它达到javac
而不是通过CLI扩展
答案 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
中加载所有.class
和lib/
个文件。
注意:
*
(通配符)字符已转义(请注意\
之前的*
)。 \
用于bash,如果您正在使用其他内容,则可能会有所不同。你想逃避它,因为java sdk实用程序,如javac
,他们自己解释通配符的方式。据我所知(如果我错了,请更正我),Windows命令行不会展开*
,所以你不需要逃避它:-cp lib\*
应该没事。;
分隔路径,如javac -cp ".;a/;b/;c/" Example.java
中所示 - 这会在以下目录中加载.class
个文件:当前目录,a,b和c。;
)时,用引号括起类路径(如示例中所示)。