使用maven 3.1.1
在我的父母pom中我有:
<groupId>com.samples</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent</name>
<modules>
<module>a</module>
<module>b</module>
<module>c</module>
</modules>
<profiles>
<profile>
<id>skip-c</id>
<modules>
<module>a</module>
<module>b</module>
</modules>
</profile>
...
但模块c
仍在使用我构建的构建:
mvn clean package -Pskip-c
如何在构建父项目时跳过子模块?
答案 0 :(得分:2)
您的问题是您的完整模块列表始终处于活动状态。您可以使用默认配置文件。
<groupId>com.samples</groupId>
<artifactId>parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent</name>
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>a</module>
<module>b</module>
<module>c</module>
</modules>
</profile>
<profile>
<id>skip-c</id>
<modules>
<module>a</module>
<module>b</module>
</modules>
</profile>
</profiles>
答案 1 :(得分:0)
除了julschis评论一些细节:
配置文件不会替换pom的正常非配置文件内容。因此,在使用您的个人资料时,您会从正常的pom中获得a,b和c,以及从个人资料中获得a和b,因此您的个人资料无用。
您需要从主要部分中删除条件模块,并将其仅放入配置文件(通常是activeByDefault配置文件)。
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>a</module>
<module>b</module>
</modules>
</profile>
<profile>
<id>add-c</id>
<modules>
<module>a</module>
<module>b</module>
<module>c</module>
</modules>
</profile>
反过来说,配置文件无法删除任何内容,只能添加或覆盖内容。
这种技术称为反应器修剪,在此描述:http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/
您也可以使用https://jira.codehaus.org/browse/MNG-5230中的新功能,只需致电(这需要Maven 3.2.1 +)
mvn clean package -pl !c
答案 2 :(得分:0)
可以使用Maven 2.0.10 +停用配置文件。
http://maven.apache.org/guides/introduction/introduction-to-profiles.html
停用个人资料
从Maven 2.0.10开始,可以使用命令行停用一个或多个配置文件,方法是在其标识符前加上字符'!'或' - '如下所示:
mvn groupId:artifactId:goal -P!profile-1,!profile-2
这可用于停用标记为activeByDefault的配置文件或通过其激活配置激活的配置文件。