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>
重点说明
-
<properties>- 定义全局可复用变量,例如
spring-boot.version,在依赖或插件中可以${spring-boot.version}调用。
- 定义全局可复用变量,例如
-
spring-boot-maven-plugin- 核心功能是把项目打成 可执行 jar(内嵌 Tomcat 或其他容器)。
<goal>repackage</goal>:生成可直接运行的 jar。
-
profiles- 用来区分 不同环境配置,如 dev、prod。
- 打包时可以指定:
mvn clean package -Pdev。 - 激活 Spring Boot 配置文件
application-dev.yml或application-prod.yml。
-
编码与 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