## 什么是 `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>
    
  • 产物路径:`target/app.jar`

## 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
    
  • 记录 GC 与 JFR(生产快速诊断):
  • 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 插件用法为主流实践。


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部