如何仅部署多模块Maven项目的一部分?

问题描述

我有一个多模块maven项目,并且只想部署2个子模块:

pom.xml // parent pom
module1
--pom.xml
module2
--pom.xml
module3
--pom.xml

仅应部署module1.jarmodule2.jar

解决方法

根据我的个人经验,我们有一个多行家项目。许多客户拥有许多模块的功能,而其他客户则拥有它们。例如,当我们为“ clientA”构建时,我们希望詹金斯打包“ module1”,“ module2”和“ module3”,但是当我们为“ clientB”进行构建时,我们只希望打包“ module1”和“ module2”以给他基本功能。

因此,部署/发布多模块项目的一部分并非绝对错误。在上面的示例中,有一种情况需要构建一些模块,而另一种情况是要构建所有模块。在这种情况下,您可以使用配置文件进行操作。

示例:在父pom.xml中

    <profiles>
        <profile>
            <id>base-functionality</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <modules>
                <module>/module1</module>
                <module>/module2</module>
            </modules>
        </profile>
        <profile>
            <id>new-feature</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <modules>
                <module>/module3</module>
            </modules>
        </profile>
    </profiles>

然后在詹金斯(Jenkins)上为“ clientA”工作:

clean package -Pbase-functionality,new-feature

在詹金斯(Jenkins)工作中的“ clientB”位置:

clean package -Pbase-functionality

注意:正如khmarbaise在下面的评论中所述,这种方法有同样的陷阱,应尽可能避免。

,

我在以下问题中找到了解决方案:

How to Deploy only the sub-modules using maven deploy?

对于不应部署的模块,应将以下属性添加到设置为{{1}的pom.xml中:

false