使用Maven对多项目进行打包是一个常见的需求,特别是在大型项目中,下面将详细介绍如何使用Maven对多项目进行打包,包括项目结构、pom.xml配置、依赖管理、插件配置以及实际打包步骤等。
一、项目结构
假设有一个包含三个模块的项目:common、service和web,其中web依赖于service,web和service都依赖于common,项目结构如下:
root-project/ ├── common/ │ └── pom.xml ├── service/ │ └── pom.xml ├── web/ │ └── pom.xml └── pom.xml (父POM)
二、父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>cn.com.leonado</groupId> <artifactId>multi-module-project</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>common</module> <module>service</module> <module>web</module> </modules> <dependencyManagement> <dependencies> <!-定义公共依赖版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.5.4</version> </dependency> </dependencies> </dependencyManagement> </project>
三、子模块POM配置
1. common模块
<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>cn.com.leonado</groupId> <artifactId>multi-module-project</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>common</artifactId> <packaging>jar</packaging> <dependencies> <!-添加公共依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
2. service模块
<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>cn.com.leonado</groupId> <artifactId>multi-module-project</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>service</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>cn.com.leonado</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
3. web模块
<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>cn.com.leonado</groupId> <artifactId>multi-module-project</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>web</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>cn.com.leonado</groupId> <artifactId>service</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>cn.com.leonado</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
四、打包步骤
在根目录(即包含pom.xml
的目录)下执行以下命令:
mvn clean package -DskipTests=true
该命令将按照正确的依赖顺序(common -> service -> web)依次编译并打包各个模块,生成的JAR文件将位于各模块的target
目录下。
五、统一打包成ZIP文件
如果需要将所有模块统一打包成一个ZIP文件,可以使用maven-assembly-plugin
,在父POM中添加以下配置:
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <finalName>leonado-test</finalName> <descriptors> <descriptor>src/assemble/assembly-win64zip.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>distro-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
并在src/assemble
目录下创建assembly-win64zip.xml
如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <!-产生zip文件的名字 --> <id>LEONADO_TEST_APIDemo(Java版)</id> <formats> <format>zip</format> </formats> <!-将全部依赖放到/lib目录下 --> <dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> </dependencySet> </dependencySets> <!-根目录下的默认bin,config,init,web四个目录会被添加到tar中 --> <fileSets> <!-jdk 目录 C:\Program Files\Java\jre7--> <fileSet> <directory>/home/build/pki/jdk/jdk1.8.0_111/jre</directory> <outputDirectory>/jre-1.8</outputDirectory> <includes> <include>**</include> </includes> </fileSet> <!--构建bin目录 --> <fileSet> <directory>windows</directory> <outputDirectory>/bin</outputDirectory> <includes> <include>*.bat</include> </includes> </fileSet> <!--构建log目录 --> <fileSet> <directory>log</directory> <outputDirectory>/log</outputDirectory> <includes> <include>**</include> </includes> </fileSet> </fileSets> </assembly>
然后执行以下命令:
mvn clean package -DskipTests=true
这将生成一个名为leonado-test.zip
的文件,其中包含所有模块及其依赖。
依赖顺序:确保在pom.xml
中正确声明模块之间的依赖关系,避免循环依赖。
插件配置:根据需求选择合适的插件,如maven-assembly-plugin
用于统一打包。
增量编译:在开发过程中,可以使用mvn clean install
命令进行增量编译,加快构建速度。
测试跳过:在打包时使用-DskipTests=true
参数跳过测试,以减少构建时间。
小伙伴们,上文介绍了“maven 多项目打包_项目打包”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。