maven 父子工程打包

在现代软件开发中,使用 Maven 管理项目依赖和构建过程已成为一种常见的做法。在大型项目中,采用父子工程结构可以有效地管理多个模块及其依赖。本文将详细介绍如何使用 Maven 父子工程进行打包,涵盖操作步骤、示例命令、注意事项及实用技巧。
父子工程结构概述
- 父工程:主要负责定义所有子模块的公共依赖和构建配置。通常包含 POM 文件,其中配置了版本号、插件等信息。
- 子工程:实际的业务模块,继承父工程的配置,通常各自有独立的功能和依赖管理。
通过父子工程结构,可以实现共享依赖、版本统一等功能,便于团队协作和后期维护。
创建 Maven 父工程
1. 初始化父工程目录
首先,创建一个新的目录作为父工程的根目录。例如,创建名为 my-parent-project 的目录:
mkdir my-parent-project
cd my-parent-project
2. 创建父工程 POM 文件
在父工程目录中,创建一个 pom.xml 文件,文件内容如下:
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>my-module-a</module>
<module>my-module-b</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<complexPluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</complexPluginManagement>
</build>
</project>
在上面的 POM 文件中,modules 标签定义了两个子模块 my-module-a 和 my-module-b。同时,dependencyManagement 标签用于集中管理项目的依赖版本。
创建子工程
1. 创建子模块
在父工程目录中,依次创建子模块的目录结构:
mkdir my-module-a
mkdir my-module-b
2. 创建子模块 POM 文件
在每个子模块目录中创建 pom.xml 文件。
my-module-a 的 POM 文件
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>my-module-a</artifactId>
</project>
my-module-b 的 POM 文件
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>my-parent-project</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>my-module-b</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-module-a</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
在子模块 POM 文件中,通过 parent 标签指定父模块的依赖关系,并定义自己的 artifactId。my-module-b 模块还额外依赖了 my-module-a 模块。
打包父子工程
1. 进入父工程目录
cd my-parent-project
2. 执行 Maven 打包命令
在父工程目录中使用以下命令进行打包:
mvn clean install
3. 输出结果
利用 mvn clean install 命令后,Maven 会执行以下操作:
- 清理项目中的 target 目录。
- 编译所有子模块。
- 为每个模块生成对应的 JAR 文件并放入各自的 target 目录。
最终,父工程和所有子模块的包都会被创建并安装进本地 Maven 仓库,供其他项目依赖。
注意事项和实用技巧
- 模块名称唯一性:确保每个子模块的 artifactId 在整个父工程中唯一,否则会导致冲突。
- 依赖范围:特别是在使用 dependencyManagement 时,确保你理解依赖的 范围,避免引入不必要的依赖。
- 版本管理:通过父工程集中管理版本,可以减少版本冲突和不一致的情况。
- 目标构建:使用 Maven 目标时,可以选择特定的目标仅针对特定子模块进行构建,例如:
mvn -pl my-module-a clean install
总结
掌握 Maven 父子工程的打包方法,可以极大地提高项目的管理效率。通过集中管理依赖和版本,团队的协作变得更加顺畅。希望本文的具体操作步骤和实用技巧能帮助开发者顺利构建和管理自己的项目。













