【问题标题】:How to execute a different goal for one module of a multi module project?如何为多模块项目的一个模块执行不同的目标?
【发布时间】:2010-11-05 21:01:20
【问题描述】:

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

文件夹结构:

project
 + module1
 + module2

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

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

我正在“梦想”一些类似于

的东西
mvn install -Dspecial=module:compile

这可能吗?如果可以,我该怎么做?

【问题讨论】:

    标签: maven-2


    【解决方案1】:

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

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

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

    • mvn -pl module1,module3 somegoal
    • mvn -pl module2 someothergoal

    【讨论】:

      【解决方案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>
      

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

      /module2/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 时。您会注意到,对于 module2,源代码编译(但只有这个目标/执行!)将被忽略。

      你也可以使用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>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多