【问题标题】:Java command line using an imported jar使用导入的 jar 的 Java 命令行
【发布时间】:2018-03-20 23:52:35
【问题描述】:

我确信这是一个愚蠢的问题,每个 Java 程序员都曾问过这个问题。但我根本找不到相关问题。

这涉及子目录,但我没有任何子目录,因为它们都与 java 文件位于同一目录中,并且我从 Executable jar file error 执行命令行的目录

这个解决方案给了我与我在下面写的相同的错误:Java command line with external .jar

其他人(我没有链接)谈论 Eclipse 和其他 IDE,但我没有使用 IDE,只是一个 Linux 终端。

我正在尝试从http://www.hummeling.com/IF97 导入公共 jar 文件。下载的jar文件已重命名为if97.jar。

我有一个名为 steam.java 的 java 文件,其中包含以下命令:

'

import com.hummeling.if97.IF97;
IF97 H2O = new IF97(IF97.UnitSystem.ENGINEERING);

System.out.println("test H2O table PSpecificEnthalpy(1): "+H2O.specificEnthalpyPT(1,300));
System.out.println("test H2O table PSpecificEnthalpy(5): "+H2O.specificEnthalpyPT(5,300));

'

但是我不知道如何在命令行中运行这个文件。

我通过键入成功编译:

'javac -cp if97.jar ~/test/steam.java'

现在我有一个名为 steam.class 的文件

但是当我执行它时:

'java steam -cp if97.jar'

'java steam -jar if97.jar'

我得到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/hummeling/if97/IF97
at steam.start(steam.java:364)
at steam.main(steam.java:341)

原因:java.lang.ClassNotFoundException: com.hummeling.if97.IF97

我正在尝试使用终端在 Linux Ubuntu 16.04 中执行此操作。这两个文件(steam.java 和 if97.jar)都在我执行 javac & java 命令的同一个主目录中。

我相信(或者我弄错了)问题在于 java 无法找到 jar 文件。但我不知道为什么。

请指教,提前谢谢。

【问题讨论】:

    标签: java jar


    【解决方案1】:

    您需要在 JVM 选项之后指定类名,因为类名之后的任何内容都被视为类的参数,而不是 JVM。

    试试这个:

    'java -cp if97.jar steam'
    

    【讨论】:

    • ~/test 也需要在类路径中。而且由于 shell 只会在 ~ 是参数中的第一个字符时扩展它,所以它需要在第一个字符 (-cp ~/test:if97.jar) 或需要扩展 (-cp if97.jar:$HOME/test)。
    • @VGR OP 的错误消息表明已找到 stream.class 本身,因此我认为 OP 已以某种方式将其复制到当前目录,并且不需要在类路径上有 ~/test
    • Jingx 的回答不起作用(错误是无法找到或加载主类蒸汽) - 为什么?但是 VGR 的评论有效:'java -cp ~/test:if97.jar steam',这也有效:'java -cp if97.jar:$HOME/test steam'。感谢您的回答,但我不明白为什么 VGR 的建议有效但 jingx 的回答无效。
    猜你喜欢
    • 2010-10-31
    • 2012-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多