jar命令打包Java程式

來源:互聯網
上載者:User

我們經常會見到jar檔案,有些可以直接運行,例如windows下雙擊jar檔案、Linux下使用 " java -jar *.jar "命令, 均能運行jar檔案,
而有些jar檔案卻不能雙擊運行或者使用上述命令運行時提示沒有Main。其中的原因和jar檔案產生辦法有關,只有產生jar檔案時指定了Main方法所在類的才能直接運行。
下面介紹常用的兩種產生jar檔案方法:

(1) 產生jar時指定入口類

例如有如下程式:
[root@localhost javaTest]# ls   <Test.java是包含main方法的入口類>
Test.java  Test.class   
首先,建立一個manifest.mf檔案,並添加相關內容,指定入口類.
[root@localhost javaTest]# vim manifest.mf 
Main-Class:<空格>Test<斷行符號>
一定要注意:空格和斷行符號:  Main-Class: Test
打包:
[root@localhost javaTest]# jar cvfm x.jar manifest.mf *.class
打包時需要將class檔案打包,當然也可以選擇其它檔案.
運行:
[root@localhost javaTest]# java -jar javaTest.jar
因為指定了入口類,所以這樣運行時會直接運行jar檔案中的Test類.
查看jar檔案中的內容:
使用 " jar xvf *.jar " 解壓jar檔案到目前的目錄下
zkl@hadoopvm01:~/java/Hello> jar xvf x.jar 
  created: META-INF/
 inflated: META-INF/MANIFEST.MF
 inflated: Test.class
zkl@hadoopvm01:~/java/Hello> ls
Test.class  x.jar  META-INF
zkl@hadoopvm01:~/java/Hello> ls META-INF/
MANIFEST.MF
zkl@hadoopvm01:~/java/Hello> cat META-INF/MANIFEST.MF   
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Sun Microsystems Inc.)
Main-Class: Test
我們可以看到有個META-INF/MANIFEST.MF檔案,manifest.mf檔案的內容在打包時會寫入到該檔案當中。
運行jar檔案時,也會讀取該檔案,找到入口類.

(2) 產生jar時不指定入口類
同樣是上面的程式, 首先打包:
[root@localhost javaTest]# jar cvf x.jar *.class
運行:
   由於沒有指定入口類, "java -jar x.jar" 命令會出現如下錯誤:
   Failed to load Main-Class manifest attribute from x.jar。
   我們解壓 x.jar 檔案,查看MANIFEST.MF內容
zkl@hadoopvm01:~/java/Hello> cat META-INF/MANIFEST.MF   
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Sun Microsystems Inc.)

發現於(1)比,少了一行,這就是原因所在。此時需要按如下方式運行jar檔案。
zkl@hadoopvm01:~/java/A> java -classpath x.jar Test
這樣運行時,java會在classpath中搜尋Test類,這裡會在x.jar中搜多到Test,然後運行。

附:

(3) jar 命令複雜打包

外部庫路徑: lib
源碼路徑: src, 有很多包
class檔案所在路徑: bin

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.