Maven 2 如何为多模块项目的一个模块执行不同的目标?

Maven 2 如何为多模块项目的一个模块执行不同的目标?,maven-2,Maven 2,我有一个由两个不同模块组成的项目。我无法控制这些模块的pom文件,因此无法更改它们。我完全控制项目pom文件。项目id未定义为模块中的父项 文件夹结构: project + module1 + module2 作为解决方案的一部分,我需要为两个模块执行两个不同的目标,以便module1安装到本地存储库中,而不是module2。这只是一个例子。我的实际问题包含多个级别,每个级别有两个以上的模块 为了最小化CI系统所需的配置,我想在一个maven调用中运行它 我在“梦见”一些类似于 mvn i

我有一个由两个不同模块组成的项目。我无法控制这些模块的pom文件,因此无法更改它们。我完全控制项目pom文件。项目id未定义为模块中的父项

文件夹结构:

project
 + module1
 + module2
作为解决方案的一部分,我需要为两个模块执行两个不同的目标,以便module1安装到本地存储库中,而不是module2。这只是一个例子。我的实际问题包含多个级别,每个级别有两个以上的模块

为了最小化CI系统所需的配置,我想在一个maven调用中运行它

我在“梦见”一些类似于

mvn install -Dspecial=module:compile
这可能吗?如果可能,我该怎么做

(…)为了最小化CI系统所需的配置,我想在一个maven调用中运行它

恐怕这是不可能的。正如我在中所解释的,作为多模块构建的一部分调用的阶段或目标针对所有模块运行

如果要为子模块的子集运行不同的阶段或目标,则必须调用maven两次,可能需要使用
--projects
-pl
选项来选择正确的子集:

  • mvn-pl模块1、模块3-somegoal
  • mvn-pl模块2其他目标

控制在Maven构建期间执行哪些目标/执行(而非阶段)的唯一方法是通过配置文件,无论项目是否具有模块

例如:

/pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>
</project>
<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
    </modules>

    <profiles>
        <profile>
            <id>with:module2</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <modules>
                <module>module2</module>
            </modules>
        </profile>
    </profiles>
</project>
然后使用命令:
mvn-Dmodule2:ignore compile package

最后,一个有趣的功能是通过配置文件更改模块:

/pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>
</project>
<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
    </modules>

    <profiles>
        <profile>
            <id>with:module2</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <modules>
                <module>module2</module>
            </modules>
        </profile>
    </profiles>
</project>

4.0.0
com公司
父母亲
1.0.0-SNAPSHOT
聚甲醛
模块1
带:模块2
真的
模2
要忽略模块2:
mvn'-p!带:模块2’包

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
    </modules>

    <profiles>
        <profile>
            <id>with:module2</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

            <modules>
                <module>module2</module>
            </modules>
        </profile>
    </profiles>
</project>