单个模块的Maven配置文件

时间:2010-03-08 11:41:37

标签: java eclipse maven-2

我有一个多模块maven项目,它成功构建,我想构建只有一个模块。我如何用profiles做到这一点?我可以通过两种方式从控制台进行操作,一种方法是转到子模块和mvn package,或者我可以使用reactor来构建一个模块。

我可以用个人资料做同样的事情吗?通过修改POM?谢谢

编辑

如果POM不可能,我可以在settings.xml中进行吗?

2 个答案:

答案 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

这里有两点需要注意:

  1. 您需要在“默认”配置文件中从POM移动<modules>(因为配置文件中的<modules>只是附加的,它们不会隐藏POM中声明的模块。)
  2. 将其标记为<activeByDefault>,如果没有其他活动,则会选择“默认”个人资料,但如果有其他内容则会停用。
  3. 甚至可以参数化模块的名称并将其作为属性传递:

    <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。