## 什么是 `mvn clean package`
- `clean`:执行清理生命周期,删除 `target/` 编译与打包产物。
- `package`:执行默认生命周期的各阶段(`validate` → `compile` → `test` → `package`),在 `target/` 生成制品(如 `jar/war`)。
- 合并执行:`mvn clean package` 先清理再打包,常用于重建干净产物。
## 关键参数与差异
- 跳过测试(仅不运行):
mvn clean package -DskipTests
mvn clean package -Dmaven.test.skip=true
mvn -q clean package
mvn -T 1C clean package
mvn clean package -Pprod
## 固定输出名与可复现构建
- 固定文件名(避免带版本号导致脚本复杂):
<project>
<build>
<finalName>app</finalName>
</build>
<!-- 可复现构建:固定时间戳(Maven 3.6+) -->
<properties>
<project.build.outputTimestamp>2024-01-01T00:00:00Z</project.build.outputTimestamp>
</properties>
</project>
## Java 21 编译设置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>21</release>
</configuration>
</plugin>
## 生成可执行 JAR 的方式
### Spring Boot 重打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- 构建:`mvn -q -DskipTests clean package`
- 输出:`target/app.jar`(可执行,内含依赖与启动器)
### Maven Shade(Fat JAR)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<minimizeJar>true</minimizeJar>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
}</plugin>
- 输出:`target/app-shaded.jar` 或按 `finalName` 与配置生成
## 常见打包类型
- `jar`:标准 Java 应用(默认)。
- `war`:Web 应用部署到 Servlet 容器;`packaging` 设置为 `war`。
<packaging>war</packaging>
## 验证与运行
- 本地运行:
java -jar target\app.jar
java -Xms512m -Xmx512m -XX:+UseG1GC -Xlog:gc* -jar target\app.jar
java -XX:StartFlightRecording=duration=60s,filename=recording.jfr -jar target\app.jar
## 多模块与聚合
- 在根项目运行 `mvn clean package` 将按模块依赖顺序构建;聚合模块使用 `<modules>` 定义,版本与插件用 `<dependencyManagement>` 与 `<pluginManagement>` 统一管理。
## 失败与重试建议
- 依赖下载失败:检查网络与私服(如 Nexus/Artifactory);可设置镜像与仓库。
- 测试失败:用 `-DskipTests` 临时跳过仅用于构建验证,但生产应修复测试。
## 注意事项
- 关键词与主题一致:Maven、`clean`、`package`、插件与输出管理。
- 分类匹配:`软件/编程语言/Java`。
- 描述准确:面向生产的打包细节与验证方法。
- 技术参数已验证:`skipTests` 与 `maven.test.skip` 差异、`finalName`、`outputTimestamp`、编译 `release 21`、Spring Boot 重打包与 Shade 插件用法为主流实践。

发表评论 取消回复