2016-01-20 62 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!子模块。然而,在评论中有人有完全相同的问题 –

相关问题