引入
jar文件具有跨平臺、數據壓縮、多文件封裝的優點,所以我們常將java源程序和其他的文件(比如資源文件、簽名)打包到一起,變成jar包。這樣對java程序的部署會更方便,也更安全。
用IDEA等IDE,可以直接將java文件轉換爲jar包。本文講解如何用JDK命令來轉換。
本文實驗環境
- windows10
- JDK
最簡單的jar包
jar包中可以含有很多文件(具體見[1]),最簡單的jar包,就只含有class和META-INF/MANIFEST.MF。
- 寫一個Hello.java
public class Hello
{
public static void main(String[] args)
{
System.out.println("hello ybdesire");
}
}
- 將Hello.java轉換爲Hello.class
E:\one_class>javac Hello.java
- 將Hello.class打包jar
用jar命令,具體如下
E:\one_class>jar -cvf hello.jar Hello.class
added manifest
adding: Hello.class(in = 418) (out= 288)(deflated 31%)
其中參數c表示要創建一個新的jar包,v表示創建過程詳細內容輸出,f表示對jar包命名。
- 運行jar包
用java命令加-jar參數來運行jar包,如下
E:\one_class>java -jar hello.jar
no main manifest attribute, in hello.jar
被告知,jar包中缺少main manifest參數。
- 在jar包中添加參數
用7zip打開hello.jar文件,右鍵選中META-INF/MANIFEST.MF的編輯。
原始內容如下(注意最後一行爲空行):
Manifest-Version: 1.0
Created-By: 1.8.0_201 (Oracle Corporation)
在最後一行插入Main-Class: Hello
,並留一行空行。改動後的內容爲:
Manifest-Version: 1.0
Created-By: 1.8.0_201 (Oracle Corporation)
Main-Class: Hello
保存修改到jar包。
- 運行改動後的jar包
用java命令加-jar參數來運行jar包,如下,得到最終結果
E:\one_class>java -jar hello.jar
hello ybdesire
將在windows10上打包的hello.jar移動到ubuntu 16.04,仍然可以用如上命令來運行,因爲jar是跨平臺的。
補充:.class文件也是跨平臺的。
參考
- [1] jar細節:https://www.ibm.com/developerworks/cn/java/j-jar/index.html
- [2] jar打包過程:https://www.cnblogs.com/flashsun/p/7246260.html
- [3] dex/jar轉換:https://blog.csdn.net/MayData/article/details/53466126