代码之家  ›  专栏  ›  技术社区  ›  Peter Schuetze

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

  •  16
  • Peter Schuetze  · 技术社区  · 14 年前

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

    project
     + module1
     + module2
    

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

    我“梦见”了一些事情

    mvn install -Dspecial=module:compile
    

    2 回复  |  直到 14 年前
        1
  •  28
  •   Community rcollyer    7 年前

    (…)为了最小化CI系统所需的配置,我希望在一个maven调用中运行此命令。

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

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

    • mvn -pl module1,module3 somegoal
    • mvn -pl module2 someothergoal
        2
  •  2
  •   LoganMzz    7 年前

    唯一能控制 目标 处决 )在Maven构建期间执行,无论您的项目是否具有模块,都是通过概要文件执行的。

    例如:

    <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>
    

    /模块1/pom.xml

    <project>
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.company</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
        <artifactId>module1</artifactId>
    </project>
    

    /模块2/pom.xml

    <project>
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>com.company</groupId>
            <artifactId>parent</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
        <artifactId>module2</artifactId>
    
        <profiles>
            <profile>
                <id>module2:ignore-compile</id>
    
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>default-compile</id>
                                    <phase>none</phase>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>
    </project>
    

    mvn -Pmodule2:ignore-compile package . 您将注意到源代码编译(但仅限于此目标/执行!)将忽略模块2。

    你也可以使用 activation

    <profiles>
        <profile>
            <id>module2:ignore-compile</id>
    
            <activation>
                <property>
                    <name>module2:ignore-compile</name>
                </property>
            </activation>
            ....
        </profile>
    </profiles>
    

    然后使用命令: 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>
        </modules>
    
        <profiles>
            <profile>
                <id>with:module2</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
    
                <modules>
                    <module>module2</module>
                </modules>
            </profile>
        </profiles>
    </project>
    

    忽略 module2 mvn '-P!with:module2' package