编译Java包会引发外部JAR的错误

时间:2011-11-01 15:04:24

标签: java classpath

这里非常基本的问题。所以我有一个我创建的Java包有三个类(一个有主方法)。我正在尝试使用一些Apache Jars,并将这些添加到Eclipse中的构建路径中。但Eclipse不会让我构建并正确运行它,所以我正在尝试命令行。我添加了env var CLASSPATH并将其指向我的lib目录,该目录包含Apache Jars。但是,当我尝试使用javac时,我遇到了一堆错误:

package org.apache.xmlrpc does not exist
import org.apache.xmlrpc.client.XmlRpcClient;

我正在阅读javac的手册页,它说:

 If neither CLASSPATH, -cp nor -classpath is specified, the user class path consists of the current directory.

所以我尝试将Jars复制到与我的三个源文件相同的位置,但没有变化。

有人可以告诉我我做错了吗?

感谢。

5 个答案:

答案 0 :(得分:0)

您可以通过在命令行上指定选项-cp来编译它:

javac -cp foo.jar:bar.jar foo/bar/Baz.java

然后使用相同的选项运行它:

java -cp foo.jar:bar.jar foo.bar.Baz

答案 1 :(得分:0)

听起来您只是将类路径设置为包含jar文件的目录。您需要将其设置为单个jar文件,或使用java.ext.dirs设置包含jar文件的“扩展名”目录。我建议使用特定的jar文件。类似的东西:

// Assuming Windows...
CLASSPATH = c:\libs\foo.jar;c:\libs\bar.jar

我个人也建议在命令行中指定类路径,而不是使用环境变量 - 后者将起作用,但如果你想针对不同的库编译不同的项目,它最终会更加繁琐。

但是,我实际建议先让Eclipse工作,而不是退回到命令行。它应该没问题 - 如果你能给我们更多关于Eclipse中失败的信息,我们可能会帮助你。

答案 2 :(得分:0)

当前目录中的jar文件不会自动包含在内;仅指正常包/目录层次结构中的.class个文件。必须明确地添加Jar文件,或者通过像javac -cp ./*这样的通配符添加(假设JDK6 +)

(某些操作系统可能需要转义*以避免全局操作; OSX不会。)

答案 3 :(得分:0)

Classpath变量(或javac的命令行选项)必须明确包含所有jar。它无法通过存储在指定目录中的jar文件。

答案 4 :(得分:0)

我同意之前的答案,但我也建议使用正确的java构建工具 - 比如ant(感觉更容易使用,但不是必需的)或maven(感觉更难以使用,但真的值得学习)