2010-05-22 67 views
7

從你們所有人的一點幫助... 我想將一個簡單的java程序轉換成jar,但似乎沒有發生任何事情。 我有2個文件:Tester.java,Tester.Class。 然後我用以下命令行:-cvf創建Tester.jar Tester.class如何將Java程序轉換爲jar?

.jar文件,但似乎沒有任何工作

罐子。 我錯過了什麼?

+2

@Matthew,我想這可能是OP想要的。 (設置Main-Class,你可以直接從jar中運行程序。)你的評論可以很好地作爲實際的答案。 – Jonik 2010-05-22 08:52:56

回答

13

要在你創建你需要執行

java -cp Tester.jar your.package.Main 

執行罐子一種更加簡便的jar文件運行的程序是要能夠做到

java -jar Tester.jar 

也就是說,然而,要求您在清單文件中指定主要類,該清單文件應包含在jar文件中:

  • Manifest-Version: 1.2 
    Main-Class: your.package.Main 
    

    在manifest.txt

  • 而創建的jar:

    jar cvfm Tester.jar manifest.txt Tester.class 
    
+1

+1,非常清晰簡潔的基本解釋 – Jonik 2010-05-22 09:50:45

+0

@aioobe如果我只使用一個不在包中的簡單類,我該怎麼辦? – pharaon450 2014-06-27 17:49:39

+0

和我的回答一樣,沒有'your.package.',我想。 – aioobe 2014-06-27 20:58:40

6

馬修•富蘭琛評論answered,你需要有一個「清單文件「,並且應該包含Main-Class頭指出哪個是jar中的主要類,以執行exec UTE。 The answer by aioobe完美地說明了最簡單的方法。

但不是這樣做,總是「手動」,我建議你看看在構建工具,如Apache Ant(或Maven,但是這可能有點難以上手),其非常常用於自動化這些構建序列。

使用Ant,你會創建一個這樣的「構建文件」(最常見的命名build.xml):

<project name="Tester"> 
    <target name="build" 
      description="Compiles the code and packages it in a jar."> 

     <javac srcdir="src" destdir="classes" source="1.6" target="1.6"/> 

     <jar destfile="Tester.jar"> 
      <fileset dir="classes"/> 
      <manifest> 
       <attribute name="Main-Class" value="com.example.Tester"/> 
      </manifest> 
     </jar> 
    </target> 
</project> 

現在,調用ant build將編譯代碼,並在「Tester.jar」打包,該也將包含正確類型的清單標題,以便您可以使用java -jar Tester.jar運行它。 (請注意,此示例假定您的源位於「src」目錄中,與您運行命令的位置相關。當然你還需要安裝Ant。)

如果你決定試用Ant,它的official manual將非常有用(特別是Ant的「任務」列表,例如顯示你可以給的選項具體任務如javacjar)。

2

我建議使用一些像Netbeans,Eclipse,IntelliJ IDEA這樣的IDE並專注於您的編程(點擊構建yor程序)。