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
相关推荐
大傻^5 小时前
Spring AI Alibaba 项目初始化:Maven依赖与YAML配置全解析
人工智能·spring·maven·springai·springaialibaba·评估框架
柠檬Leade11 小时前
IDEA中 java: 程序包lombok不存在 问题解决
java·开发语言·maven·intellij-idea·依赖不存在
非凡的小笨鱼11 小时前
IDEA找不到类编译不通过的解决方案
java·maven·intellij-idea
番茄去哪了12 小时前
从0到1独立开发一个论坛项目(一)
java·数据库·oracle·maven
攒了一袋星辰1 天前
SequenceGenerator高并发有序顺序号生成中间件 - 架构设计文档
java·后端·spring·中间件·架构·kafka·maven
spencer_tseng1 天前
ojdbc6-1.0.0.jar xmlworker-1.0.0.jar
java·maven·jar
朱一头zcy2 天前
[IDEA不同版本中]配置完Maven后 重启/导入新项目就恢复默认配置(C盘.m2)的解决方案
经验分享·maven·intellij-idea
麦麦鸡腿堡2 天前
JavaWeb_maven
java·开发语言·maven
不吃香菜学java2 天前
苍穹外卖-新增菜品需求分析
java·spring boot·spring·tomcat·maven·ssm