最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java程序打包常見幾種方式的完整步驟(Maven/Gradle/?手動打包)

 更新時間:2025年12月02日 11:11:01   作者:三希  
這篇文章主要介紹了Java程序打包常見幾種方式(Maven/Gradle/手動打包)的相關資料,文中通過示例代碼講解了基礎方法、Maven項目打包、Gradle項目打包、打包成EXE或原生應用,需要的朋友可以參考下

前言

將 Java 程序打包成可執(zhí)行文件或分發(fā)包的方式,取決于你的項目類型(普通 Java 項目、Maven/Gradle 項目)和需求(是否需要跨平臺、是否包含依賴等)。以下是幾種常見的打包方法:

一、基礎方法:使用javac+jar命令手動打包(適合簡單項目)

如果是不含第三方依賴的簡單 Java 項目,可通過 JDK 自帶工具手動打包:

  1. 編譯 Java 源碼假設項目結構如下:

    plaintext

    myapp/
    └── src/
        └── com/
            └── example/
                └── Main.java  // 主類,含 main 方法
    

    編譯生成 class 文件:

    bash

    # 進入 src 目錄的父級
    cd myapp
    # 編譯所有 .java 文件,輸出到 classes 目錄
    javac -d classes src/com/example/Main.java
    
  2. 創(chuàng)建 MANIFEST.MF 文件用于指定主類(可執(zhí)行 JAR 必需),在 classes 目錄下創(chuàng)建 META-INF/MANIFEST.MF

    plaintext

    Manifest-Version: 1.0
    Main-Class: com.example.Main  # 主類全限定名(包名+類名)
    
  3. 打包成 JAR 文件

    bash

    # 進入 classes 目錄
    cd classes
    # 打包當前目錄下的所有文件為 myapp.jar
    jar cfm ../myapp.jar META-INF/MANIFEST.MF .
    
  4. 運行 JAR 文件

    bash

    java -jar myapp.jar
    

二、Maven 項目打包(推薦,適合帶依賴的項目)

如果使用 Maven 管理項目,可通過 maven-jar-plugin 或 maven-assembly-plugin 打包:

  1. 配置 pom.xml在 pom.xml 中添加打包插件(以包含所有依賴為例):

    xml

    <build>
        <plugins>
            <!-- 指定主類 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.Main</mainClass>  <!-- 主類全限定名 -->
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            
            <!-- 打包所有依賴到一個 JAR 中(fat jar) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.4.2</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
  2. 執(zhí)行打包命令

    bash

    mvn clean package
    

    打包結果在 target 目錄下:

    • myapp-1.0-SNAPSHOT.jar:僅包含項目自身代碼的 JAR
    • myapp-1.0-SNAPSHOT-jar-with-dependencies.jar:包含所有依賴的可執(zhí)行 JAR(推薦運行這個)
  3. 運行打包后的 JAR

    bash

    java -jar target/myapp-1.0-SNAPSHOT-jar-with-dependencies.jar
    

三、Gradle 項目打包(適合帶依賴的項目)

Gradle 項目可通過 application 插件或 shadow 插件打包:

  1. 配置 build.gradle(或 build.gradle.kts

    groovy

    plugins {
        id 'java'
        id 'application'  // 用于生成可執(zhí)行腳本
        id 'com.github.johnrengelman.shadow' version '7.1.2'  // 用于打 fat jar
    }
    
    mainClassName = 'com.example.Main'  // 主類全限定名
    
    // 配置 shadow 插件(可選,生成包含依賴的 JAR)
    shadowJar {
        archiveBaseName = 'myapp'
        archiveVersion = '1.0'
        archiveClassifier = 'all'
    }
    
  2. 執(zhí)行打包命令

    bash

    # 生成包含依賴的 fat jar
    gradle shadowJar
    # 或生成可執(zhí)行腳本(Windows 為 .bat,Linux 為 .sh)
    gradle installDist
    
  3. 運行打包結果

    • Fat jar:java -jar build/libs/myapp-1.0-all.jar
    • 可執(zhí)行腳本:build/install/myapp/bin/myapp(Linux)或 build/install/myapp/bin/myapp.bat(Windows)

四、打包成 EXE 或原生應用(適合 Windows 桌面程序)

如果需要將 Java 程序打包成 Windows 可執(zhí)行文件(.exe),可使用第三方工具:

  1. Launch4j

    • 功能:將 JAR 包包裝成 EXE,支持指定 JRE 版本、圖標等。
    • 步驟:
      1. 下載 Launch4j 并安裝
      2. 配置「Input file」為你的 JAR 路徑,「Output file」為生成的 EXE 路徑
      3. 配置「JRE」選項(如最小版本),點擊「Build wrapper」生成 EXE
  2. Excelsior JET

    • 功能:將 Java 字節(jié)碼編譯為原生機器碼(.exe),不依賴 JRE,啟動更快。
    • 適合商業(yè)項目(免費版有功能限制)。

五、打包注意事項

  1. 依賴管理

    • 簡單項目:手動復制依賴 JAR 到指定目錄,運行時通過 -cp 指定類路徑。
    • 復雜項目:優(yōu)先使用 Maven/Gradle 的 fat jar 功能,避免依賴缺失。
  2. 主類指定

    • 可執(zhí)行 JAR 必須在 MANIFEST.MF 中指定 Main-Class,否則需通過 java -cp jar包 主類名 運行。
  3. JRE 依賴

    • 打包后的 JAR 或 EXE 仍需目標機器安裝對應版本的 JRE(除非使用 Excelsior JET 等工具編譯為原生代碼)。
  4. 資源文件

    • 確保項目中的資源文件(如配置文件、圖片)被正確打包到 JAR 中,讀取時使用 getClass().getResourceAsStream() 方法。

根據(jù)項目復雜度選擇合適的方法:簡單項目用 jar 命令,依賴較多的項目用 Maven/Gradle,需原生 EXE 則用 Launch4j 等工具。

到此這篇關于Java程序打包常見幾種方式(Maven/Gradle/ 手動打包)的文章就介紹到這了,更多相關Java程序打包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解基于Spring Data的領域事件發(fā)布

    詳解基于Spring Data的領域事件發(fā)布

    這篇文章主要介紹了詳解基于Spring Data的領域事件發(fā)布,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 源碼解讀Spring-Integration執(zhí)行過程

    源碼解讀Spring-Integration執(zhí)行過程

    Spring-Integration基于Spring,在應用程序中啟用了輕量級消息傳遞,并支持通過聲明式適配器與外部系統(tǒng)集成,今天主要是看個簡單的hello word進來分析下整個執(zhí)行過程,感興趣的朋友一起看看吧
    2021-06-06
  • Spring Boot配置管理最佳實踐方案

    Spring Boot配置管理最佳實踐方案

    本文將詳細介紹Spring Boot的配置管理相關內容,包括配置優(yōu)先級、多環(huán)境管理、屬性注入、安全配置、配置校驗和熱更新等主題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-02-02
  • 淺談Spring與SpringMVC父子容器的關系與初始化

    淺談Spring與SpringMVC父子容器的關系與初始化

    這篇文章主要介紹了淺談Spring與SpringMVC父子容器的關系與初始化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Springboot使用Spring Data JPA實現(xiàn)數(shù)據(jù)庫操作

    Springboot使用Spring Data JPA實現(xiàn)數(shù)據(jù)庫操作

    Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 規(guī)范的基礎上開發(fā)的一個框架,使用 Spring Data JPA 可以極大地簡化JPA 的寫法,本章我們將詳細介紹在Springboot中使用 Spring Data JPA 來實現(xiàn)對數(shù)據(jù)庫的操作
    2021-06-06
  • Java中注解@Async實現(xiàn)異步及導致失效原因分析

    Java中注解@Async實現(xiàn)異步及導致失效原因分析

    Async注解用于聲明一個方法是異步的,當在方法上加上這個注解時將會在一個新的線程中執(zhí)行該方法,而不會阻塞原始線程,這篇文章主要給大家介紹了關于Java中注解@Async實現(xiàn)異步及導致失效原因分析的相關資料,需要的朋友可以參考下
    2024-07-07
  • Java的設計模式之代理模式使用詳解

    Java的設計模式之代理模式使用詳解

    這篇文章主要介紹了Java的設計模式之代理模式使用詳解,代理模式是23種設計模式之一,它關心的主要是過程,而不是結果,代理模式主要提供了對目標對象的間接訪問方式,即通過代理對象來訪問目標對象,需要的朋友可以參考下
    2024-01-01
  • JDK數(shù)組阻塞隊列源碼深入分析總結

    JDK數(shù)組阻塞隊列源碼深入分析總結

    在這篇文章當中,我們將通過源碼仔細為大家介紹一下JDK具體是如何實現(xiàn)數(shù)組阻塞隊列的,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • Java編程調用微信接口實現(xiàn)圖文信息推送功能

    Java編程調用微信接口實現(xiàn)圖文信息推送功能

    這篇文章主要介紹了Java編程調用微信接口實現(xiàn)圖文信息等推送功能,涉及java微信圖文信息推送接口調用及相關文件、字符串編碼轉換相關操作技巧,需要的朋友可以參考下
    2017-08-08
  • Spring Boot全局異常處理解析

    Spring Boot全局異常處理解析

    這篇文章主要為大家詳細介紹了Spring Boot全局異常處理的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

枣庄市| 潞西市| 内乡县| 普格县| 贵溪市| 齐齐哈尔市| 偏关县| 涿州市| 班玛县| 大渡口区| 四平市| 磴口县| 苏尼特右旗| 延边| 永康市| 姜堰市| 长沙县| 雷波县| 扎兰屯市| 墨玉县| 泾川县| 衢州市| 深水埗区| 洪雅县| 岳阳县| 乌海市| 迁安市| 呼图壁县| 玛纳斯县| 商洛市| 张家口市| 睢宁县| 北碚区| 外汇| 唐河县| 南皮县| 印江| 溆浦县| 信丰县| 平谷区| 驻马店市|