2016-01-20 61 views
2

這個問題被問了很多次,但我沒有找到解決方案,如何禁用模塊的子模塊!?!如何從Maven reactor構建中排除模塊及其子模塊?

例如: 我想禁用項目BB和CC以及它們的子模塊

A 
|-AA 
| |--AAA 
|-BB 
| |-BBB 
|-CC 
    |-CCC 

但是當我運行這個

mvn -pl \!AA,\!BB clean install 

我看到也BBB和CCC被執行。這裏只是一個例子。我們有一個包含大約100個項目的多模塊項目...所以我不想列出所有項目,只有父母。這可能嗎?

謝謝

+0

「我們有大約一百個項目,多模塊項目」,聽起來相當可怕的:) –

+0

這就是現實:) – pan40

回答

1

你可以使用Maven profiles你的目的。

在父母項目中,您可以定義一個覆蓋提供所有必需模塊的modules部分的配置文件。這樣的配置文件默認是有效的,所以在預期的行爲上沒有變化。

但是,正常POM(超出配置文件)的modules部分將爲空。請注意,我們不能做相反的事情(這會更有意義):我剛剛嘗試過,但沒有奏效。

所以,這樣的樣本POM會是什麼樣子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.sample</groupId> 
<artifactId>test3</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>pom</packaging> 

<modules> 
</modules> 

<profiles> 
    <profile> 
     <id>aggregator</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <modules> 
      <module>..\test</module> 
      <module>..\test2</module> 
     </modules> 
    </profile> 
</profiles> 

執行:

mvn clean install 

的Maven也將啓動配置文件,並執行聚合建立符合市場預期。所以,沒有迴歸。

但是,在執行時:

mvn clean install -P!aggregator 

Maven將停用如上所述並且如輪廓這樣,沒有模塊,僅執行父如你希望執行的反應器中生成。
可惜倒退的方法(配置爲空模塊的配置文件)在我的測試中不起作用,但這種方法應該有希望給你足夠的提示以達到你的目標。


更新
您在實際使用this new feature可因爲Maven的3.2.1。從票上的評論,有人有同樣的問題:

如何排除嵌套模塊?我嘗試了新功能,看起來好像:
1.當頂層模塊被排除時,它的嵌套模塊不是。
2.不可能直接排除嵌套模塊。

回答是:

嵌套模塊不是由父模塊中排除。 排除方法模仿包含方法,其匹配器不支持通配符等。 因此,級聯排除將需要像-amd這樣的額外標誌。 依賴圖是使用-pl當過濾以下列順序:
1.包含工程+可能的上游和下游
2.排除項目
3.跳過用於恢復項目
所以應該可以直接排除嵌套模塊,因爲它們應該在過濾開始之前存在於初始依賴關係圖中。

+0

您好感謝您的回答,我的第一個目的是不使用配置文件,我們內部的原因團隊結構...但我會考慮它。 我們使用maven 3.2.3,但我無法理解這篇文章的意思。 -el不是現有的maven選項 – pan40

+0

我會更新我的答案,您實際上正在使用它,-el建議已被丟棄,以支持-pl!子模塊。然而,在評論中有人有完全相同的問題 –

相關問題