我有一个多模块maven项目,它成功构建,我想构建只有一个模块。我如何用profiles做到这一点?我可以通过两种方式从控制台进行操作,一种方法是转到子模块和mvn package
,或者我可以使用reactor来构建一个模块。
我可以用个人资料做同样的事情吗?通过修改POM?谢谢
编辑
如果POM不可能,我可以在settings.xml中进行吗?
答案 0 :(得分:13)
要使用配置文件实现此功能,您可以使用两个配置文件,一个<activeByDefault>
包含所有模块,另一个只包含所需模块。像这样:
<profiles>
<profile>
<id>all</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<modules>
<module>module-1</module>
...
<module>module-n</module>
</modules>
</profile>
<profile>
<id>module-2</id>
<modules>
<module>module-2</module>
</modules>
</profile>
<profiles>
然后像这样称呼它:
mvn -Pmodule-2 package
这里有两点需要注意:
<modules>
(因为配置文件中的<modules>
只是附加的,它们不会隐藏POM中声明的模块。)<activeByDefault>
,如果没有其他活动,则会选择“默认”个人资料,但如果有其他内容则会停用。甚至可以参数化模块的名称并将其作为属性传递:
<profiles>
...
<profile>
<id>module-x</id>
<activation>
<property>
<name>module-name</name>
</property>
</activation>
<modules>
<module>${module-name}</module>
</modules>
</profile>
<profiles>
并像这样调用maven:
mvn -Dmodule-name=module-2 package
但这是一个糟糕的实现恕我直言,我更喜欢-pl
“高级”反应堆选项(更少的xml,更多的功能和灵活性):
mvn -pl module-2 package
答案 1 :(得分:0)
要克服使用<modules>
的Maven默认<profiles>
的可加性,您可以使用具有特定配置文件的反应堆,例如:
mvn -pl module-2 -Pprofile-name package
这将打包在配置文件名称而非默认配置文件中定义的模块2。