复杂的maven项目构建思路和方案

发布于:2024-07-05 ⋅ 阅读:(15) ⋅ 点赞:(0)

1 项目结构

project

        |——module1(<packaging>jar</packaging>)

        |——module2(<packaging>war</packaging>)

        |——module3(<packaging>jar</packaging>)

        |——module4(<packaging>pom</packaging>)

                |——sub_module1(<packaging>jar</packaging>)

                |——sub_module2(<packaging>jar</packaging>)

                |——sub_module3(<packaging>jar</packaging>)

                |——pom.xml (<packaging>pom</packaging>)

        |——pom.xml (<packaging>pom</packaging>)

pom.xml (<packaging>pom</packaging>)

2 各结构pom文件格式

project.pom文件

<groupId>com.cx</groupId>
<artifactId>cx</artifactId>
<version>1.0.0-SNAPSHOT</version>

<properties>
    <cx.version>1.0.0-SNAPSHOT</cx.version>
    ...
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>module1</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>module2</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>module3</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <!-- module4 的打包格式是pom,所以直接引module4的子模块依赖,如下 -->
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>sub_module1</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>sub_module2</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>sub_module3</artifactId>
            <version>${cx.version}</version>
        </dependency>
        <dependency>
            <groupId>com.cx</groupId>
            <artifactId>sub_module4</artifactId>
            <version>${cx.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

【注:】
表达式${project.version}表示项目(而非模块)的version值,直接应用即可,不需要properties标签注册
表达式${...}可以向下传递,各个模块或子模块可用直接应用

module4.pom文件

<parent>
    <groupId>com.cx</groupId>
    <artifactId>cx</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<!-- 自动跟随parent的version,即1.0.0.SNAPSHOT -->
<artifactId>module4</artifactId>

<modules>
    <module>sub_module1</module>
    <module>sub_module2</module>
    <module>sub_module3</module>
</modules>

sub_module3.pom文件

<parent>
    <groupId>com.cx</groupId>
    <artifactId>module4</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>

<!-- 自动跟随parent的version,即1.0.0.SNAPSHOT -->
<artifactId>sub_module2</artifactId>

<dependencies>
    <dependency>
        <groupId>com.cx</groupId>
        <artifactId>sub_module1</artifactId>
    </dependency>
    <dependency>
        <groupId>com.cx</groupId>
        <artifactId>module1</artifactId>
    </dependency>
    ...
</dependencies>

3 总结

        项目的pom还有其它引入方式,此处引入的是实际开发中用到的一种比较合理和易读的方式。也有些方式不会把module的依赖引到project.pom,此时如果module1依赖module2,则要在module1.pom中引入module2的依赖时加上version


网站公告

今日签到

点亮在社区的每一天
去签到