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

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

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

前言

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

一、基礎(chǔ)方法:使用javac+jar命令手動(dòng)打包(適合簡(jiǎn)單項(xiàng)目)

如果是不含第三方依賴的簡(jiǎn)單 Java 項(xiàng)目,可通過(guò) JDK 自帶工具手動(dòng)打包:

  1. 編譯 Java 源碼假設(shè)項(xiàng)目結(jié)構(gòu)如下:

    plaintext

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

    編譯生成 class 文件:

    bash

    # 進(jìn)入 src 目錄的父級(jí)
    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

    # 進(jìn)入 classes 目錄
    cd classes
    # 打包當(dāng)前目錄下的所有文件為 myapp.jar
    jar cfm ../myapp.jar META-INF/MANIFEST.MF .
    
  4. 運(yùn)行 JAR 文件

    bash

    java -jar myapp.jar
    

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

如果使用 Maven 管理項(xiàng)目,可通過(guò) 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>
            
            <!-- 打包所有依賴到一個(gè) 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
    

    打包結(jié)果在 target 目錄下:

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

    bash

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

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

Gradle 項(xiàng)目可通過(guò) 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. 運(yùn)行打包結(jié)果

    • 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 或原生應(yīng)用(適合 Windows 桌面程序)

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

  1. Launch4j

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

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

五、打包注意事項(xiàng)

  1. 依賴管理

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    Spring Boot配置管理最佳實(shí)踐方案

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

    淺談Spring與SpringMVC父子容器的關(guān)系與初始化

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

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

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

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

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

    Java的設(shè)計(jì)模式之代理模式使用詳解

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

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

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

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

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

    Spring Boot全局異常處理解析

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

最新評(píng)論

新安县| 广汉市| 汉沽区| 隆回县| 澄城县| 玛纳斯县| 肃北| 新田县| 常山县| 甘南县| 济源市| 象山县| 奉贤区| 益阳市| 连云港市| 苍梧县| 简阳市| 赤峰市| 安西县| 黔西| 祁东县| 云梦县| 神池县| 芦山县| 罗定市| 翁牛特旗| 鹿泉市| 疏附县| 吴忠市| 项城市| 凤台县| 东光县| 新源县| 彰化县| 东山县| 雷山县| 北京市| 石门县| 太和县| 九龙县| 兰考县|