Spring Boot 项目可执行 jar 的完整 Maven 打包示例

Spring Boot 项目可执行 jar 的完整 Maven 打包示例,同时支持以下功能:

  • 跳过测试
  • 指定环境 profile(dev/prod)
  • 自定义版本号
  • 生成可执行 jar

1. 假设 pom.xml 配置示例

xml 复制代码
<!-- 定义 Maven 项目的根元素,指定命名空间和 XSD 验证 -->
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <!-- Maven 模型版本,一般固定为 4.0.0 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 项目坐标:groupId + artifactId + version 唯一标识一个 Maven 项目 -->
    <groupId>com.example</groupId>          <!-- 项目组织/公司标识,通常使用域名反写 -->
    <artifactId>demo</artifactId>          <!-- 项目名称或模块名 -->
    <version>1.0.0</version>               <!-- 项目版本 -->
    <packaging>jar</packaging>             <!-- 打包类型,可选 jar/war/pom 等 -->

    <!-- 项目属性,可在 pom.xml 或插件中引用 -->
    <properties>
        <java.version>17</java.version>                       <!-- 指定 JDK 版本 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 源码编码 -->
        <spring-boot.version>3.2.0</spring-boot.version>      <!-- Spring Boot 版本 -->
    </properties>

    <!-- 项目依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>  <!-- Spring Boot 核心启动依赖 -->
            <version>${spring-boot.version}</version>       <!-- 使用上面定义的版本 -->
        </dependency>
    </dependencies>

    <!-- 构建配置 -->
    <build>
        <plugins>
            <!-- Spring Boot Maven 插件:用于打包可执行 jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version> <!-- 插件版本与 Spring Boot 版本一致 -->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal> <!-- repackage 目标会把 jar 打成可执行 Spring Boot jar,包含所有依赖 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <!-- Maven 构建 profile,用于不同环境的配置 -->
    <profiles>
        <profile>
            <id>dev</id> <!-- 开发环境 profile ID -->
            <properties>
                <spring.profiles.active>dev</spring.profiles.active> <!-- Spring Boot 激活 dev 配置 -->
            </properties>
        </profile>
        <profile>
            <id>prod</id> <!-- 生产环境 profile ID -->
            <properties>
                <spring.profiles.active>prod</spring.profiles.active> <!-- Spring Boot 激活 prod 配置 -->
            </properties>
        </profile>
    </profiles>

</project>

重点说明

  1. <properties>

    • 定义全局可复用变量,例如 spring-boot.version,在依赖或插件中可以 ${spring-boot.version} 调用。
  2. spring-boot-maven-plugin

    • 核心功能是把项目打成 可执行 jar(内嵌 Tomcat 或其他容器)。
    • <goal>repackage</goal>:生成可直接运行的 jar。
  3. profiles

    • 用来区分 不同环境配置,如 dev、prod。
    • 打包时可以指定:mvn clean package -Pdev
    • 激活 Spring Boot 配置文件 application-dev.ymlapplication-prod.yml
  4. 编码与 Java 版本

    • UTF-8 防止中文乱码。
    • <java.version> 决定编译兼容性。

2. Maven 打包命令示例

ini 复制代码
mvn clean package \
    -Pdev \                       # 指定环境为 dev,可改为 prod
    -DskipTests=true \            # 跳过单元测试
    -Drevision=1.0.5              # 自定义版本号

说明:

  • -Pdev:使用 dev profile
  • -DskipTests=true:跳过测试,提高打包速度
  • -Drevision=1.0.5:自定义版本号,可在 pom.xml 使用 ${revision}

3. 运行可执行 jar

ini 复制代码
java -jar target/demo-1.0.5.jar --spring.profiles.active=dev
  • 这里的 spring.profiles.active 可以覆盖 Maven profile
  • jar 包已经包含所有依赖,直接可运行

4. 打包 prod 示例

ini 复制代码
mvn clean package -Pprod -DskipTests=true -Drevision=1.0.5
java -jar target/demo-1.0.5.jar --spring.profiles.active=prod
相关推荐
Knight_AL3 小时前
Maven <dependencyManagement>:如何在多模块项目中集中管理依赖版本
java·数据库·maven
while(1){yan}3 小时前
计算器和登录界面(实现前后端互通)
spring boot·spring·servlet·java-ee·tomcat·maven
hopsky3 小时前
mvn install 需要 手动清除 pom.lastUpdated
java·maven·mavbne
我待_JAVA_如初恋7 小时前
解决:IDEA中右侧的Maven视图中多了Profiles这一项。并且Profiles下的JDK版本与实际使用版本不一致
java·maven·intellij-idea
计算机毕设指导621 小时前
基于Spring Boot的防诈骗管理系统【源码文末联系】
java·spring boot·后端·spring·tomcat·maven·intellij-idea
絔宝1 天前
在eclipse中创建Maven项目-用于学习Selenium 自动化测试
学习·selenium·eclipse·maven
葵花楹1 天前
Maven 核心能力拆解 + 实战: Java 邮件群发
java·maven
洛阳纸贵1 天前
JAVA高级工程师--Maven父子关系专题
java·前端·maven
爱干饭的boy1 天前
MacBook安装node.js/maven/mysql
mysql·node.js·maven