java打jar包和運行jar包的兩種方式


java打jar包和運行jar包的兩種方式
更詳細的打包方式請參考https://www.cnblogs.com/mq0036/p/8566427.html

一、java類不依賴第三方jar包
以簡單的一個java類Hello為例:
最終生成的jar包結構

META-INF
  MENIFEST.MF
Hello.class

方法步驟
(1)用記事本寫一個Hello.java的文件

class Hello{
    public static void main(String[] agrs){
        System.out.println("hello");
     }
}

(2)用命令行進入到該目錄下,編譯這個文件

javac Hello.java

(3)將編譯后的Hello.class文件打成jar包

 jar -cvf hello.jar Hello.class 

  c表示要創建一個新的jar包,v表示創建的過程中在控制台輸出創建過程的一些信息,f表示給生成的jar包命名
(4)運行jar包
   java -jar hello.jar 這時會報錯誤:hello.jar中沒有主清單屬性

   添加Main-Class屬性
   用壓縮軟件打開hello.jar,會發現里面多了一個META-INF文件夾,里面有一個MENIFEST.MF的文件,用記事本打開

  Manifest-Version: 1.0
  Created-By: 1.8.0_121 (Oracle Corporation)

   在第三行的位置寫入 Main-Class: Hello (注意冒號后面有一個空格,整個文件最后有一行空行),保存

   再次運行 java -jar hello.jar ,此時成功在控制台看到 hello ,成功。

二、java類依賴第三方jar包
假設類Hello依賴jar包Tom.jar,最終生成的jar包結構還是:

META-INF
  MENIFEST.MF
Hello.class 

解釋: Hello類與Tom.jar的調用關系如下:

class Hello{
    public static void main(String[] agrs){
        Tom.speak();
     }
}
class Tom{
    public static void speak(){
        System.out.println("hello");
    }
}

但是Tom類已經打成了jar包Tom.jar

方法步驟:
(1)編寫一個Hello.java並將其編譯成Hello.class,注意,由於Hello里面引用了Tom類的speak方法,因此在打jar包時應使用-cp參數,將tom.jar包引入

javac -cp tom.jar Hello.class

  這里的 -cp 表示 -classpath,指的是把tom.jar加入classpath路徑下
(2)將hello.class達成jar包

jar -cvf hello.jar Hello.class

(3)引入jar包需要在MENIFEST.MF文件中配置一個新屬性:Class-Path,路徑指向你需要的所有jar包
   現在MENIFEST.MF這個文件應該變成:

Manifest-Version: 1.0
Created-By: 1.8.0_121 (Oracle Corporation)
Main-Class: Hello
Class-Path: Tom.jar

(4)使用java -cp Tom.jar;hello.jar hello來運行jar包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM