Java Maven打包案例怎么操作

wen java案例 25

Java Maven打包案例:从零到一完整操作指南与常见问题解答

目录导读


Maven打包核心概念

Maven打包本质上是将Java项目编译、测试、资源处理后生成可分发文件的过程,常见的打包类型包括JAR(Java Archive)、WAR(Web Archive)以及POM(父项目),Maven通过pom.xml文件中定义的<packaging>标签来控制输出格式。

Java Maven打包案例怎么操作

核心流程:validate → compile → test → package → verify → install → deploy

对于开发人员而言,最关注的是package阶段,它会根据配置生成最终产物,如果是Spring Boot项目,还会看到Fat JAR(包含依赖的完整JAR包),打包后的文件默认输出在项目的target目录下。


环境准备与项目结构

1 必备工具

  • JDK 1.8+(建议使用JDK 11或17)
  • Apache Maven 3.6+
  • IDE(如IntelliJ IDEA、Eclipse)

2 验证环境

java -version
mvn -version

3 标准项目结构

my-project/
├── pom.xml                     # Maven核心配置文件
├── src/
│   ├── main/
│   │   ├── java/              # 源代码
│   │   └── resources/         # 配置文件、静态资源
│   └── test/
│       └── java/              # 测试代码
└── target/                    # 构建产物输出目录(打包后自动生成)

注意pom.xml必须包含<groupId><artifactId><version>三要素,以及<build>块中的打包插件配置。


最常用打包命令详解

1 基础打包命令

# 跳过测试,快速打包
mvn package -DskipTests
# 同时执行测试(推荐)
mvn clean package

2 常用参数说明

参数 作用
-Dmaven.test.skip=true 跳过测试编译与运行
-DskipTests 跳过测试执行但编译测试类
-P prod 激活<profiles>中的生产环境配置
-U 强制更新快照依赖

3 打包产物示例

  • JAR:target/my-project-1.0.0.jar
  • Spring Boot Fat JAR:target/my-project-1.0.0.jar(可自运行)
  • WAR:target/my-project.war

实战案例:Spring Boot项目打包

1 添加Spring Boot Maven插件

pom.xml<build><plugins>中加入:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.7.0</version>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2 执行打包

mvn clean package -DskipTests

3 验证打包结果

进入target目录,使用以下命令启动:

java -jar my-project-0.0.1-SNAPSHOT.jar

控制台输出Started Application in X seconds即表示打包成功。

4 指定配置文件打包

mvn package -Dspring.profiles.active=prod

常见打包错误与解决方案

1 编译错误:找不到符号

原因:依赖未正确下载或版本冲突。
解决

mvn dependency:resolve
mvn clean compile

若仍报错,检查pom.xml中是否有<scope>provided</scope>的依赖被误写。

2 打包后JAR无法运行(无主清单属性)

现象no main manifest attribute
原因:未配置Spring Boot插件或主类未指定。
解决

<configuration>
    <mainClass>com.example.Application</mainClass>
</configuration>

3 资源文件未被打包

解决:在<build>中显式配置资源目录:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

问答环节

问1:mvn packagemvn install有什么区别?

  • mvn package:仅将项目打包并输出到本地target目录。
  • mvn install:打包后将产物安装到本地Maven仓库(~/.m2/repository),供其他本地项目依赖引用。
    场景:多模块开发时常用install确保子模块间依赖最新。

问2:打包时如何排除测试类?

:推荐使用-DskipTests(仍编译测试类)或-Dmaven.test.skip=true(完全跳过测试阶段),不推荐修改pom.xml<skip>true</skip>固定配置,因为这会降低代码质量把控。

问3:Maven打包后JAR包体积过大怎么办?

:优先检查是否依赖了过多无关库,可使用mvn dependency:tree分析依赖,针对Spring Boot,可以使用<excludeGroupIds>排除不需要的传递依赖。

<exclusion>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
</exclusion>

若仍需瘦身,可设置<executable>true</executable>并配合外部依赖目录运行。

问4:如何将打包产物重命名?

:在<build><finalName>中指定:

<finalName>my-app-prod</finalName>

输出变为my-app-prod.jar

问5:Windows和Linux打包有无区别?

:Maven打包过程与操作系统无关,但路径分隔符不同,建议在pom.xml中使用${project.basedir}来避免硬编码,Linux环境下若遇到脚本权限问题,需手动添加chmod +x target/*.jar


Maven打包是Java项目部署的核心环节,掌握pom.xml插件配置、常用命令参数以及常见问题排查,能大幅提升开发效率,对于生产环境,建议始终使用-DskipTests=false确保测试通过,并结合CI/CD工具(如Jenkins)实现自动化打包,如需在私有仓库分发,可进一步了解mvn deploy与Nexus仓库的集成。

抱歉,评论功能暂时关闭!