2010-11-05 81 views
14

我有一個由兩個不同模塊組成的項目。我無法控制這些模塊的pom文件,因此無法更改它們。我完全控制了項目pom文件。項目ID未在模塊中定義爲父項。如何爲多模塊項目的一個模塊執行不同的目標?

文件夾結構:

project 
+ module1 
+ module2 

由於周圍的工作,我需要執行這兩個模塊的兩個不同的目標,使模塊1被安裝到本地存儲庫,而不是MODULE2的一部分。這只是一個例子。我的實際問題包含更多級別,每個級別有2個以上的模塊。

爲了儘量減少我的CI系統所需的配置,我想在一個maven調用中運行這個。

我的東西沿着

mvn install -Dspecial=module:compile 

行「夢想」這是可能的,如果是,我該怎麼辦呢?

回答

24

(...)爲了最大限度地減少我的CI系統所需的配置,我想在一個maven調用中運行這個。

恐怕這是不可能的。正如我在this answer中所解釋的,作爲多模塊構建的一部分調用的階段或目標針對所有模塊運行。

如果你想運行一個不同的階段或目標的子模塊的子集,你必須打電話行家兩次,也許使用--projects-pl選項選擇合適的子集:

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

只有這樣,才能控制哪些目標/執行(不階段)期間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

相關問題