11

maven中,一旦您定义modules了您的pom.xml所有配置文件,就会聚合其中定义的模块:(仅相关部分)

<project>
    <modules>
        <module>module1</module>
    </modules>
    <profiles>
         <profile>
             <id>pr1</id>
             <modules>
                 <moudule>module2</module>
             </modules>

如果您执行 amvn clean它会将命令传递给module1.

如果您发出mvn clean -Ppr1,它将传递给module1and module2

我想知道是否maven 3可以有一个pom.xmlwith 子模块并覆盖它。我的意思是执行一个配置文件,而不是将它们自己的模块添加到构建中,例如:

<project>
    <!-- omitted -->
    <modules>
        <!-- modules -->
    </modules>
    <build>
        <!-- build -->
    </build>
    <profiles>
        <profile>
             <!-- This profile with no modules -->
        </profile>
    </profiles>
</project>

这个要求可能听起来很傻,但我只想知道是否有类似插件配置的机制。

<configuration self.combine="override"

问候!

塞达诺

4

3 回答 3

15

这是不可能的。配置文件配置始终与主配置合并,因此您只能在您的情况下添加模块。

但是,您可以做的是创建某种“默认”配置文件(按<activeByDefault>true</activeByDefault>部分<activation>),当没有调用其他配置文件时启用该配置文件并将您的默认模块列表放在那里。然后,当在 Maven 构建调用中未指定配置文件时,将使用此“默认”配置文件,但当您显式调用至少一个配置文件时,则不是,因此您可以通过这种方式从头开始定义模块列表。

于 2012-05-21T10:47:41.080 回答
14

虽然这个问题很老,但谷歌仍然对其排名很高,所以添加一个新答案是有意义的。

您可以使用没有属性技巧的激活来实现您想要的。

<profiles>
        <!-- By default, include the modules -->
        <profile>
            <id>full-build</id>
            <activation>
                <!-- Activation by absence of a property. Run normally, without -Dskip-modules -->
                <property>
                    <name>!skip-modules</name>
                </property>
            </activation>
            <modules>
                <module>module1</module>
                <module>module2</module>
                <module>module3</module>
            </modules>
        </profile>

        <!-- No-modules build -->
        <profile>
            <id>no-modules</id>
            <activation>
                <!-- Activation by a property. Run with -Dskip-modules to activate -->
                <property>
                    <name>skip-modules</name>
                </property>
            </activation>
            <modules>
            </modules>
        </profile>
    </profiles>
于 2015-06-07T23:09:29.547 回答
0

你可以这样做:

  <profiles>
    <profile>
      <id>run-xyz</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <modules>
        <module>www-ab</module>
        <module>www-cd</module>
      </modules>
    </profile>

    <profile>
      <id>run-its</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <modules>
        <module>www-db</module>
        <module>www-it</module>
      </modules>
    </profile>
  </profiles>

如果你在谈论这样的事情。但我建议对这些事情要非常小心。

这只是您如何设置 activeByDefault 的问题。有了这个,可以创建或多或少的任何组合。

于 2012-05-21T10:49:56.667 回答