当前位置:首页 > 行业动态 > 正文

如何高效地使用Maven进行多项目打包?

Maven 多项目打包可以通过使用聚合(Aggregation)或继承(Inheritance)来实现。在聚合中,一个父 POM 文件会定义子项目的集合,而每个子项目可以独立打包。在继承中,子项目可以继承父项目的依赖和配置信息,从而实现代码复用和统一管理。

在Maven中进行多项目打包,通常涉及多个模块(Module)和一个父项目(Parent Project),每个模块可以是一个独立的项目,而父项目用于管理这些模块的构建和依赖关系,以下是详细的步骤和配置方法:

如何高效地使用Maven进行多项目打包?  第1张

1. 项目结构

假设有一个父项目slankkaapplication,它包含以下子模块:

slankkaserver:主要的SpringBoot应用模块

slankkadao:数据访问对象模块

slankkacommon:通用工具类模块

slankkacore:核心业务逻辑模块

2. 父项目的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>slankkaapplication</artifactId>
    <version>1.0SNAPSHOT</version>
    <packaging>pom</packaging> <! 父项目必须设置为 pom >
    <modules>
        <module>slankkaserver</module>
        <module>slankkadao</module>
        <module>slankkacommon</module>
        <module>slankkacore</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <! 在这里管理所有子模块的公共依赖 >
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>springbootmavenplugin</artifactId>
                <version>2.5.4</version> <! 请根据需要调整版本 >
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

3. 子模块的pom.xml配置

slankkaserver模块的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.maven.org/xsd/maven4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>slankkaapplication</artifactId>
        <version>1.0SNAPSHOT</version>
    </parent>
    <artifactId>slankkaserver</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <! 添加对其他子模块的依赖 >
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>slankkadao</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>slankkacommon</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>slankkacore</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>springbootmavenplugin</artifactId>
                <version>2.5.4</version> <! 请根据需要调整版本 >
                <configuration>
                    <mainClass>com.example.SlankkaServerApplication</mainClass> <! 主启动类 >
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

slankkadao模块的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.maven.org/xsd/maven4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>slankkaapplication</artifactId>
        <version>1.0SNAPSHOT</version>
    </parent>
    <artifactId>slankkadao</artifactId>
    <packaging>jar</packaging>
    <! 添加具体的依赖项 >
</project>

其他子模块的配置类似,只需修改artifactId和具体依赖项即可。

4. 打包命令

在父项目的根目录下运行以下命令进行打包:

mvn clean package Dmaven.test.skip=true

这将首先构建并打包所有的子模块,然后根据配置文件生成最终的可执行JAR文件或WAR文件。

序号 概述 Maven命令示例
1 将多个Maven项目打包成一个大的WAR包或JAR包。 使用mavenassemblypluginmavenshadeplugin插件。
2 使用mavenassemblypluginassembly标签定义打包规则。 “`xml

<artifactId>mavenassemblyplugin</artifactId>

<version>3.3.0</version>

<configuration>

<descriptorRefs>

<descriptorRef>jarwithdependencies</descriptorRef>

</descriptorRefs>

</configuration>

<executions>

<execution>

<id>makeassembly</id>

<phase>package</phase>

<goals>

<goal>single</goal>

</goals>

</execution>

</executions>

“` |

| 3 | 使用mavenshadeplugintransformersfilters来处理依赖冲突。 | “`xml

<groupId>org.apache.maven.plugins</groupId>

<artifactId>mavenshadeplugin</artifactId>

<version>3.2.4</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<transformers>

<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

<mainClass>com.example.MainClass</mainClass>

</transformer>

</transformers>

<filters>

<filter>

<artifact>com.example:dependency</artifact>

<excludes>

<exclude>**/someclass.class</exclude>

</excludes>

</filter>

</filters>

</configuration>

</execution>

</executions>

“` |

| 4 | 使用mavenassemblypluginassembly描述文件。 | 创建一个assembly.xml文件,定义如何组合项目依赖和资源。 |

| 5 | 使用mavendependencyplugin复制依赖到打包目录。 | “`xml

<groupId>org.apache.maven.plugins</groupId>

<artifactId>mavendependencyplugin</artifactId>

<version>3.1.2</version>

<executions>

<execution>

<id>copydependencies</id>

<phase>preparepackage</phase>

<goals>

<goal>copydependencies</goal>

</goals>

<configuration>

<outputDirectory>${project.build.directory}/lib</outputDirectory>

</configuration>

</execution>

</executions>

“` |

| 6 | 使用Maven的生命周期命令进行打包。 |mvn clean packagemvn install。 |

0