將Java項目打包為可執(zhí)行JAR 文件的四種方法
我將詳細介紹將 Java 項目打包為可執(zhí)行 JAR 文件的完整流程,包括使用 IDE 和命令行兩種方法。
方法一:使用 IntelliJ IDEA 打包
步驟 1:配置項目結(jié)構
- 打開項目
- 點擊 File > Project Structure
- 在 Project Settings 中選擇 Artifacts
- 點擊 + 號 > JAR > From modules with dependencies
步驟 2:配置主類
- 在 "Main Class" 字段選擇主類:例如:
com.example.demo.DesktopFileSearch
- 確保選擇 "extract to the target JAR" 選項
- 點擊 OK
步驟 3:構建 JAR 文件
- 點擊 Build > Build Artifacts
- 選擇您的 artifact > Build
- 生成的 JAR 文件將位于
out/artifacts/
目錄下
方法二:使用 Maven 打包
步驟 1:添加 Maven 插件
在 pom.xml
中添加以下插件配置:
<build> <plugins> <!-- 編譯插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- 創(chuàng)建可執(zhí)行 JAR 的插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.example.demo.DesktopFileSearch</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 包含依賴的插件(可選) --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.demo.DesktopFileSearch</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
步驟 2:執(zhí)行打包命令
在項目根目錄(包含 pom.xml 的目錄)打開命令行,執(zhí)行:
mvn clean package
步驟 3:獲取 JAR 文件
- 生成的 JAR 文件位于
target/
目錄 - 如果使用了 assembly 插件,會生成兩個文件:
your-project-name.jar
- 不含依賴your-project-name-jar-with-dependencies.jar
- 包含所有依賴
方法三:使用 Gradle 打包
步驟 1:配置 build.gradle
在 build.gradle
文件中添加:
plugins { id 'java' id 'application' } application { mainClassName = 'com.example.demo.DesktopFileSearch' } jar { manifest { attributes 'Main-Class': 'com.example.demo.DesktopFileSearch' } // 包含所有依賴(可選) from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
步驟 2:執(zhí)行打包命令
在項目根目錄執(zhí)行:
gradle clean build
步驟 3:獲取 JAR 文件
生成的 JAR 文件位于 build/libs/
目錄
方法四:手動創(chuàng)建 JAR(不使用構建工具)
步驟 1:編譯 Java 文件
javac -d target/classes src/main/java/com/example/demo/*.java
步驟 2:創(chuàng)建清單文件
創(chuàng)建 META-INF/MANIFEST.MF
文件:
Manifest-Version: 1.0 Main-Class: com.example.demo.DesktopFileSearch Class-Path: .
步驟 3:打包為 JAR
jar cfm target/your-app.jar META-INF/MANIFEST.MF -C target/classes .
測試 JAR 文件
運行 JAR 文件以確保正確打包:
java -jar your-app.jar
常見問題解決
問題:運行 JAR 時出現(xiàn) "No main manifest attribute"
解決方案:
- 確保 MANIFEST.MF 文件包含正確的 Main-Class 屬性
- 使用
jar tf your-app.jar
檢查清單文件是否正確包含 - 如果使用 Maven/Gradle,確保插件配置正確
問題:缺少依賴項
解決方案:
使用包含依賴的打包方式(如 maven-assembly-plugin)
將所有依賴 JAR 放在同一目錄,使用
-cp
指定類路徑:java -cp "your-app.jar:libs/*" com.example.demo.DesktopFileSearch
問題:資源文件未包含
解決方案:
確保資源文件位于正確位置(如 src/main/resources)
在構建配置中包含資源目錄:
java -cp "your-app.jar:libs/*" com.example.demo.DesktopFileSearch
最佳實踐
版本控制:在 JAR 文件名中包含版本號
依賴管理:
- 對于簡單項目,使用包含依賴的單一 JAR
- 對于大型項目,使用 lib 目錄存放依賴
簽名驗證:使用 jarsigner 對 JAR 進行簽名
jarsigner -keystore mykeystore.jks -storepass password -keypass password your-app.jar mykey
瘦身打包:使用 ProGuard 或其它工具減小 JAR 大小
跨平臺測試:在不同操作系統(tǒng)上測試 JAR 文件
總結(jié)打包 Java 應用程序為 JAR 文件是分發(fā)和部署的關鍵步驟。選擇適合您項目的打包方法:
- 簡單項目:使用 IDE 內(nèi)置的導出功能
- 標準項目:使用 Maven 或 Gradle 構建
- 需要依賴管理:使用包含依賴的打包方式
- 特殊需求:手動創(chuàng)建 JAR 文件
完成 JAR 打包后,您可以進一步使用 Launch4j 或 jpackage 工具將其轉(zhuǎn)換為 EXE 文件,創(chuàng)建完整的 Windows 安裝程序。
到此這篇關于將Java項目打包為可執(zhí)行JAR 文件的文章就介紹到這了,更多相關java打包jar命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java結(jié)合prometheus如何實現(xiàn)自定義數(shù)據(jù)監(jiān)控
文章介紹了如何配置Prometheus監(jiān)控系統(tǒng),包括配置文件prometheus.yml、被監(jiān)控應用的指標暴露配置以及自定義監(jiān)控指標的實現(xiàn),同時,還詳細說明了監(jiān)控應用如何通過Prometheus API獲取數(shù)據(jù)、處理數(shù)據(jù)并返回結(jié)果2024-12-12Springboot如何使用YML文件配置多環(huán)境
這篇文章主要介紹了Springboot如何使用YML文件配置多環(huán)境問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作
Nebula?Graph?是一款開源的、分布式的、易擴展的原生圖數(shù)據(jù)庫,能夠承載包含數(shù)千億個點和數(shù)萬億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級查詢,這篇文章主要介紹了Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢,需要的朋友可以參考下2022-10-10idea啟動springboot報錯: 找不到或無法加載主類問題
這篇文章主要介紹了idea啟動springboot報錯: 找不到或無法加載主類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12java自定義注解實現(xiàn)前后臺參數(shù)校驗的實例
下面小編就為大家?guī)硪黄猨ava自定義注解實現(xiàn)前后臺參數(shù)校驗的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11利用java反射機制實現(xiàn)自動調(diào)用類的簡單方法
下面小編就為大家?guī)硪黄胘ava反射機制實現(xiàn)自動調(diào)用類的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08