单模块的Maven配置文件

8
我有一个多模块的maven项目,构建成功,我想只构建其中一个模块。如何使用配置文件实现这一点?我可以通过控制台用两种方式来执行,一种是转到子模块并运行mvn package,另一种是使用反应堆来构建单个模块。
我能否通过修改POM文件来使用相同的配置文件进行操作?谢谢。 编辑 如果无法从POM文件中实现,我能否从settings.xml文件中实现?
2个回答

15

使用配置文件来实现,你可以使用两个配置文件,一个是<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

需要注意两点:

  1. 你需要将 <modules> 从 POM 中的“默认”配置文件中移动(因为来自配置文件的 <modules> 只是累加的,它们不会隐藏在 POM 中声明的模块)。
  2. 通过标记它为 <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

@Pascal Thivent 真是太棒了..我不知道该说什么..谢谢你,伙计,当涉及到Maven时,你是首屈一指的。 - ant
我同意@Pascal是一个Maven天才。我还要补充一点,使用反应堆构建比配置多个配置文件更加清晰。 - user626607

0
为了克服Maven默认的<modules><profiles>之间的可加性特性,您可以使用具体配置文件的反应堆,例如:
mvn -pl module-2 -Pprofile-name package

这将打包在 profile-name 中定义的 module-2 模块,而不是默认配置文件中的模块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接