这个问题已经被问了很多次,但是我没有找到解决方案,如何禁用一个模块的子模块?!
例如: 我想禁用项目BB和CC以及它们的子模块。
A
|-AA
| |--AAA
|-BB
| |-BBB
|-CC
|-CCC
但是当我运行这个
mvn -pl \!AA,\!BB clean install
我看到BBB和CCC也被执行了。这只是一个示例。我们有一个多模块项目,大约有一百个项目...所以我不想列出所有的项目,只想列出父级项目。这可行吗?
谢谢。
这个问题已经被问了很多次,但是我没有找到解决方案,如何禁用一个模块的子模块?!
例如: 我想禁用项目BB和CC以及它们的子模块。
A
|-AA
| |--AAA
|-BB
| |-BBB
|-CC
|-CCC
但是当我运行这个
mvn -pl \!AA,\!BB clean install
您可以使用Maven配置文件来实现您的目的。
在父项目中,您可以定义一个配置文件,覆盖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
mvn clean install -P!aggregator
如何排除嵌套模块?我尝试了新功能,似乎:
1. 当排除顶部模块时,其嵌套模块不会被排除。
2. 不可能直接排除嵌套模块。
答案是:
父模块不会排除子模块。 排除方法模仿包含方法,其匹配器不支持通配符等。 因此,要级联排除将需要一个额外的标志,例如-amd。 使用-pl时,依赖关系图在以下顺序下进行过滤:
1. 包括的项目+可能的上游和下游
2. 已排除的项目
3. 跳过恢复项目
因此,应该可以直接排除嵌套模块,因为它们应该在过滤开始之前出现在初始依赖关系图中。