2017-10-09 77 views
0

我确定这是一个愚蠢的问题,并且以前每个java程序员都一定会问这个问题。但我根本找不到相关的问题。使用导入的jar的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' 

使用终端com.hummeling.if97.IF97

我想执行这个在Linux操作系统Ubuntu 16.04:我得到的错误:

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。这两个文件(steam.java和if97.jar)都位于我执行javac命令的同一个主目录中。

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

请提前告知,谢谢。

回答

0

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

试试这个:

'java -cp if97.jar steam' 
+0

'〜/ test'还需要在类路径中。而且由于shell只会扩展'〜',如果它是参数中的第一个字符,它需要首先('-cp〜/ test:if97.jar')或需要扩展('-cp if97.jar: $ HOME/test')。 – VGR

+0

@VGR OP的错误消息表明,流。类本身已经找到了,所以我假设OP以某种方式将它复制到当前目录中,并且不需要在类路径上具有'〜/ test'。 – jingx

+0

Jingx的答案没有奏效(错误是无法找到或加载主类蒸汽) - 为什么? 但是,VGR注释工作: 'java命令〜/测试:if97.jar蒸汽', 这也工作: 'java命令if97.jar:$ HOME /测试蒸汽'。 感谢您的回答,但我不明白为什么VGR的建议工作,但不是jingx的答案。 – Azrudi