你可以使用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.跳过用于恢复项目
所以应该可以直接排除嵌套模块,因为它们应该在过滤开始之前存在于初始依赖关系图中。
“我们有大约一百个项目,多模块项目”,听起来相当可怕的:) –
这就是现实:) – pan40