这个问题被问了很多次,但我没有找到解决方案,如何禁用模块的子模块!?!
例如:我想禁用项目 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
我看到 BBB 和 CCC 也被执行了。这只是一个示例。我们有一个包含大约一百个项目的多模块项目......所以我不想列出所有项目,只列出父母。这可能吗?
谢谢
您可以出于您的目的使用Maven 配置文件。
在父项目中,您可以定义一个配置文件,该配置文件覆盖modules
提供所有必需模块的部分。默认情况下,此类配置文件将处于活动状态,因此不会更改预期行为。
但是,modules
正常 POM 的部分(没有配置文件)将为空。请注意,我们不能做相反的事情(这会更有意义):我刚刚尝试过,但没有奏效。
因此,这样的示例 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 将停用上面的配置文件,因此执行没有模块的反应器构建,只执行您希望的父级。
可惜反向方法(带有空模块的配置文件)在我的测试中不起作用,但该方法有望为您提供足够的提示以实现您的目标。
更新
您实际上正在使用自 Maven 3.2.1以来可用的这个新功能。从票的评论中,有人提出了同样的问题:
排除嵌套模块怎么样?我尝试了新功能,似乎:
1. 当一个顶级模块被排除时,它的嵌套模块不是。
2. 不能直接排除嵌套模块。
答案是:
嵌套模块不被父模块排除。排除方法模仿包含方法,并且它的匹配器不支持通配符等。因此,级联排除需要一个额外的标志,如 -amd。使用 -pl 时,依赖关系图按以下顺序过滤:
1. 包含的项目 + 可能的上游和下游
2. 排除
的项目 3. 跳过恢复项目
所以应该可以直接排除嵌套模块,因为它们应该存在于过滤开始之前的初始依赖关系图。