【问题标题】:Java command-line problems with .jar libraries.jar 库的 Java 命令行问题
【发布时间】:2011-03-04 15:10:21
【问题描述】:

我有一个 .java (driver.java) 文件,我正在尝试从命令行编译和运行。它使用名为EXT.jar 的外部库,其结构只是一个名为EXT 的文件夹,其中包含几十个类。

所以我跑了:

javac -cp EXT.jar driver.java

这可以很好地编译类。

然后当我跑步时:

java -cp EXT.jar driver

我收到了java.lang.NoClassDefFoundError

奇怪的是,如果我解压 JAR(所以现在我在根目录中有一个名为 EXT 的文件夹),最后一个命令就可以正常工作了!!驱动程序将执行!

有什么方法可以让 driver.class 从EXT.jar/EXT/*class 而不是实际的 EXT 文件夹中查找需要的类文件?

谢谢!

【问题讨论】:

    标签: java command-line jar compilation


    【解决方案1】:

    您正在将类编译到本地目录。所以当你运行它时,你需要在你的类路径中包含当前目录。例如:

    java -cp .;EXT.jar driver
    

    或者在linux中:

    java -cp .:EXT.jar driver
    

    按照你现在的方式,你说你的类路径是 only EXT.jar(以及 CLASSPATH 环境变量中的任何内容),没有别的(这就是为什么当前目录, driver.class 所在的位置被排除)

    【讨论】:

    • 会的。我显然需要等待 15 分钟才能接受答案:)
    • 谢谢马特,你的回答在一个罐子的情况下对我有用,但现在我需要 2 个使用另一个罐子。这两个罐子都在我的项目中一个名为“libs”的文件夹中。但无法让它工作。我正在使用 Ubuntu。请帮助
    • @AndroidGuy 您可以继续列出 JAR,用冒号分隔。例如。 java -cp .:libs/one.jar:libs/two.jar MainClass
    • 只是一个注释,供我个人参考,但您始终必须先指定 classpathBEFORE 可执行字节码(Java 类)名称!例如,以下对我不起作用(开始拉头发):java MyApp -cp .;EXT.jar 虽然这工作得很好:java -cp .;EXT.jar MyApp
    • 我确信@AndroidGuy 现在已经弄明白了,但对于其他人来说,java -cp .:libs/* MainClass 涵盖了 n 个 JAR 案例
    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多