【问题标题】:Using profiles to control which Maven modules are built使用配置文件来控制构建哪些 Maven 模块
【发布时间】:2025-12-16 15:00:02
【问题描述】:

我的 maven POM.xml 中有以下 XML:

<profiles>
  <profile>
     <id>default</id>
     <activation>
        <activeByDefault>true</activeByDefault>
        <property>
           <name>default</name>
           <value>!disabled</value>
        </property>
     </activation>
     <modules>
        <module>m1</module>
        <module>m2</module>
        <module>m3</module>
     </modules>
  </profile>
  <profile>
     <id>x</id>
     <modules>
        <module>m1</module>
     </modules>
  </profile>
</profiles>

我想要实现的是:

  1. 当我运行 mvn install 时,我希望它构建 m1、m2 和 m3 项目。

  2. 当我运行 mvn install -Px 时,我希望它构建 m1。

我目前的问题是,使用上面的代码,选项 2 构建了所有 m1、m2 和 m3。

【问题讨论】:

  • 为什么要为默认配置文件设置激活属性?您说您希望它默认运行,但如果该属性没有“禁用”值。从第一个配置文件中删除整个属性部分。
  • 我已经做到了,但没有帮助。现在的问题是运行“mvn install”时没有构建任何模块。
  • 我在没有property 部分的情况下测试了相同的配置文件,它可以按照您的意愿工作。尝试使用以下命令:mvn help:active-profilesmvn -Px help:active-profiles

标签: maven profiles


【解决方案1】:

找到解决方案的人,首先定义“x”配置文件和“默认”,它工作正常(疯狂的 Maven !!)。这是最终结果:

   <profiles>
      <!-- DO NOT CHANGE THE *ORDER* IN WHICH THESE PROFILES ARE DEFINED! -->
      <profile>
         <id>x</id>
         <modules>
            <module>m1</module>
         </modules>
      </profile>
      <profile>
         <id>default</id>
         <activation>
            <activeByDefault>true</activeByDefault>
         </activation>
         <modules>
            <module>m1</module>
            <module>m2</module>
            <module>m3</module>
         </modules>
      </profile>
   </profiles>

【讨论】:

  • 你用的是什么版本的maven?这不应该有任何区别。
  • 排序在这里没有意义..我在寻找类似的东西..我可以调用任何配置文件,当我想构建所有模块时我只是不提供配置文件,所以模块 n 序列是执行
  • 我同意。我遇到了同样的问题,但解决方案是当我使用配置文件时,我必须从 根目录中显式删除我的模块并在 中声明它们(从而创建默认配置文件)。我尝试切换顺序以验证此答案,但这里没有任何改变。 @Galder Zamarreño 您使用的是什么 Maven 版本?我想尝试重现以确保它不是 Maven 错误。我的是 3.5.0。
  • 如果有一个公共模块应该在所有模块之前构建呢?
  • 值得一提的是删除 pom.xml 中的任何 &lt;modules&gt; 声明,并且只使用 &lt;profiles&gt; 中的声明。
【解决方案2】:

您可以从命令行禁用将 runByDefault 设置为 true 的 maven 配置文件,如下所示:

mvn install -P !default

注意,这需要 Maven 版本 2.0.10。

【讨论】:

  • 那太好了,但是我无法更改实际的 Maven 命令。对于 IDE,要确定要导入工作区的项目,他们使用类似“mvn install”之类的东西,第二个命令是一个云提供商为我运行的,我也无法更改。
  • IOW,我想要一种方法来实现这一点,只需要修改 pom.xml。
【解决方案3】:

只要在-P后面加一个空格,命令的sintax就是

mvn install -P x

不像你使用的那样

mvn install -Px

看看Maven - Introduction to profiles

【讨论】: