2017-10-09 78 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