蓝桉云顶

Good Luck To You!

Maven 多项目打包,如何实现高效项目打包管理?

Maven 多项目打包可以通过聚合构建实现,使用父 POM 文件统一管理子模块的构建和依赖。

使用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 多项目打包_项目打包”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

  •  雨华
     发布于 2024-02-19 17:17:20  回复该评论
  • c语言中的asm是什么意思这篇文章深入浅出地解释了C语言中内联汇编的概念和使用方法,对于理解和掌握C语言底层实现具有重要参考价值。
  •  独立
     发布于 2024-03-10 09:57:16  回复该评论
  • c语言中的asm是什么意思这篇文章深入浅出地解释了汇编语言在C语言中的应用,让我们明白了如何在C程序中嵌入汇编代码以提高性能和实现特定功能。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接