2012-09-04 109 views
12

有可能在本地運行一個JAR文件。下一步是在另一臺PC上運行它。運行JAR文件需要JRE和JDK嗎?

問題是JRE,JDK還是兩者都需要運行JAR文件?

+1

ofcource要運行Jar文件,您只需要Java-RUNTIME-Environment(jre)而不是其中包含jre的Java-DEVELOPMENT-Kit(jdk)。但是我真的不知道'將這個jar文件運行到其他系統中'的意思,你是否簡單地意味着在不同的PC上運行? – nurgan

回答

26

JDK包含了JRE。

大多數程序只需要JRE(Java Runtime Environment),但有些程序在運行時需要編譯器,在這種情況下您需要JDK。

如果您有JDK,則不需要JRE。

+0

如果jre已經存在,爲什麼需要編譯器? – nobalG

+0

@nobalG因爲我現在有足夠的信譽發表評論,這裏是爲你考慮這樣一個場景:我有我想要的地方寫在運行時編譯其他代碼代碼的情況,然後使用該編譯代碼。在我的情況我創建一個工具,可以採取基於特定框架的測試類,編譯,加載類,並且從中提取的測試數據,使得數據可以被用作端至端測試的一部分。爲了使此工具正常運行,必須使用JDK運行它,以便它可以使用Java編譯器。 –

4

要運行只需要java.exe的(窗口)的JAR文件。 JDK是用於Java的開發工具包,JRE是運行時。 JDK包含JRE。

+1

謝謝。你能解釋一下我在linux上需要什麼? – Dhinakar

+2

對於linux,您可以使用apt-get安裝java SDK,或者使用synaptic,或者您可以從oracle站點下載bin文件。 –

+0

如果被執行的代碼依賴於僅包含在JDK,例如,'JavaCompiler'項目的第一個說法是不正確的。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

2

你只需要JRE。

如果你正在嘗試運行jar文件具有主類:<classname>頭出現在清單文件,那麼你就可以簡單地運行該命令的jar文件:

java -jar [your jar file name]

如果清單文件不具有該條目(你知道包含的主要功能的類的完全限定類名),那麼你可以通過在命令運行jar文件:

java -cp [absolute path to jar file] [full qualified class name containing the main function]

+0

如果被執行的代碼依賴於僅包含在JDK,例如,'JavaCompiler'項目這是不正確的。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

2

JRE是足夠運行

JDK用於開發

+0

如果正在執行的代碼取決於僅包含在JDK中的項目,例如'JavaCompiler',則這不是真的。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

1

你需要一個JRE而不是JDK。 JRE是java運行時環境,沒有它就不能執行java代碼。 .jar是一個已編譯的java文件,並且這需要運行Java運行時環境。

+1

此答案具有誤導性,因爲它暗示JDK不夠充分且不相關。我相信,一個更精確的答案是:「你需要一個或其他任一個就足夠了,因爲JDK包含JRE使用JDK,如果你打算做JAVA編程自己。」 –

+0

如果被執行的代碼依賴於僅包含在JDK,例如,'JavaCompiler'項目這是不正確的。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

2

要運行只需要JRE jar文件。您可以運行以下命令jar文件:

Java的罐子[JAR文件名]

+1

這並非總是如此。如果罐子包含取決於附帶的JDK而不是JRE(例如'JavaCompiler'),則可能無法正確或根本沒有JDK運行的項目代碼。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

0

你想運行jar文件;所以您只需要Java運行時環境(即JRE)。

+0

如果正在執行的代碼取決於僅包含在JDK中的項目,例如'JavaCompiler',則這不是真的。請參閱[這個答案](http://stackoverflow.com/a/2946402/3284624)爲例。 –

3

在對已接受答案的評論中,nobalG問道:「如果jre已經存在,爲什麼需要編譯器?

在撰寫本文時,我沒有足夠的評論聲望,所以我在這裏回答。

我有一種情況,我想編寫代碼在運行時編譯其他代碼,然後使用該編譯代碼。在我的情況我創建一個工具,可以採取基於特定框架的測試類,編譯,加載類,並且從中提取的測試數據,使得數據可以被用作端至端測試的一部分。爲了使此工具正常運行,必須使用JDK運行它,以便它可以使用Java編譯器。

相關問題