Java應用打包成jar文件有兩種主要方式:命令行和構建工具。1. 命令行方式需先編譯代碼,創建manifest.mf指定主類,再用jar命令打包;2. maven通過配置pom.xml中的maven-jar-plugin插件,運行mvn clean package生成jar;3. gradle在build.gradle中配置jar任務,運行gradle clean build生成jar。meta-inf目錄存放元數據,其中manifest.mf定義jar版本、主類等信息。若要包含第三方依賴,可通過構建工具生成“胖jar”,或在manifest.mf中指定class-path屬性。運行jar使用java -jar命令,如:java -jar myjar.jar,并可附加參數。
Java應用打包,核心就是把你的代碼、依賴、資源文件,按照一定的規范,放到一個壓縮包里,方便分發和運行。這個壓縮包,就是JAR文件。
解決方案
打包Java應用成JAR文件,主要有兩種方式:命令行和使用構建工具(比如Maven或Gradle)。
立即學習“Java免費學習筆記(深入)”;
命令行方式
-
編譯Java代碼: 確保你的Java源代碼已經編譯成.class文件。
javac MyClass.java
-
創建MANIFEST.MF文件: 這個文件描述了JAR文件的元數據,比如主類。在META-INF目錄下創建MANIFEST.MF文件,內容類似:
Manifest-Version: 1.0 Main-Class: MyClass
Main-Class指定了程序的入口類。
-
創建JAR文件: 使用jar命令打包。
jar cfm MyJar.jar META-INF/MANIFEST.MF *.class
c表示創建,f表示指定JAR文件名,m表示指定MANIFEST文件。*.class表示包含所有編譯后的類文件。
使用Maven
Maven通過pom.xml文件管理項目的依賴和構建過程。
-
配置pom.xml: 在pom.xml文件中,指定maven-jar-plugin插件。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>com.example.MyClass</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
mainClass指定主類。
-
打包: 在項目根目錄下運行命令:
mvn clean package
Maven會自動編譯代碼、下載依賴,并生成JAR文件到target目錄下。
使用Gradle
Gradle使用build.gradle文件進行項目配置。
-
配置build.gradle:
plugins { id 'java' } jar { manifest { attributes 'Main-Class': 'com.example.MyClass' } from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
Main-Class指定主類。
-
打包: 運行命令:
gradle clean build
Gradle會在build/libs目錄下生成JAR文件。
JAR文件中的META-INF目錄有什么作用?
META-INF目錄是JAR文件中的一個特殊目錄,用于存放JAR文件的元數據信息。最重要的文件就是MANIFEST.MF,它定義了JAR文件的版本、創建者、主類等信息。其他文件可能包括簽名信息,用于驗證JAR文件的完整性和來源??梢哉f,沒有META-INF目錄,JAR文件就缺少了靈魂,程序不知道從哪里開始運行。
如何在JAR文件中包含依賴的第三方庫?
這是個很關鍵的問題。直接把所有依賴的JAR文件放到一起打包成一個大的JAR文件(也叫“胖JAR”或“uber JAR”)是一種常見的做法。Maven和Gradle都提供了相應的插件來實現這個功能。比如Maven的maven-assembly-plugin和Gradle的shadowJar插件。另一種方式是創建可執行JAR文件時,將依賴的JAR文件放在同一目錄下,并在MANIFEST.MF文件中指定Class-Path屬性,告訴jvm去哪里尋找依賴的庫。
如何運行JAR文件?
運行JAR文件很簡單,使用java -jar命令即可。
java -jar MyJar.jar
如果JAR文件需要額外的參數,可以直接在命令后面添加。例如:
java -jar MyJar.jar arg1 arg2
但要注意,如果你的JAR文件沒有指定主類,或者主類不存在,運行時會報錯。