有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译Java包的类路径为外部JAR抛出错误

这是个很基本的问题。所以我创建了一个Java包,它有三个类(一个有main方法)。我正在尝试使用一些ApacheJAR,并将它们添加到Eclipse中的构建路径中。但是Eclipse不允许我正确地构建和运行它,所以我尝试使用命令行。我已经添加了env-var类路径,并将其指向我的lib目录,该目录包含Apache jar。然而,当我尝试使用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.

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

有人能告诉我我做错了什么吗

谢谢


共 (5) 个答案

  1. # 1 楼答案

    Classpath变量(或javac的命令行选项)必须显式包含所有JAR。它不能遍历存储在指定目录中的jar文件

  2. # 2 楼答案

    当前目录中的jar文件不会自动包括在内;它只引用正常包/目录层次结构中的.class文件。必须显式地添加Jar文件,或者通过javac -cp ./*(假设是JDK6+)之类的通配符添加Jar文件

    (有些操作系统可能需要退出*以避免全球化,而OSX则不需要。)

  3. # 3 楼答案

    听起来您刚刚将类路径设置为包含jar文件的目录。您需要将其设置为各个jar文件,或者使用java.ext.dirs设置包含jar文件的“扩展”目录。我建议使用特定的jar文件。比如:

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

    我个人还建议在命令行上指定类路径,而不是使用环境变量——后者会起作用,但如果您想针对不同的库编译不同的项目,它会变得更加灵活

    然而,我建议首先让Eclipse工作,而不是退回到命令行。这应该没问题——如果你能给我们更多关于Eclipse失败的信息,我们也许能帮你解决这个问题

  4. # 4 楼答案

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

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

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

    java -cp foo.jar:bar.jar foo.bar.Baz
    
  5. # 5 楼答案

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