使用maven配置文件来控制构建执行

时间:2011-01-13 20:22:55

标签: maven-2

我需要修改大型项目的maven构建,以便在典型的开发构建期间跳过某些步骤(即不构建* -source.jar文件)。我为maven搜索了“条件执行”,但没有找到任何东西。

开发配置文件听起来像直观的方式 - 但我不知道maven是多么直观。配置文件的文档显示了如何为不同的配置文件设置不同的属性(即数据库连接参数)。我想我可以设置一个属性,然后测试该属性是否在maven-source-plugin-executions-execution标签中设置。

这是在maven中进行条件执行的正确方法吗?

在maven中执行此操作的“正确”方式是什么?

2 个答案:

答案 0 :(得分:36)

你正在考虑它有点倒退:让配置文件启用行为,而不是禁用它。这正是配置文件最擅长的,而且正是您的情况:您只希望在某些情况下运行这些步骤。所以你可能有类似的东西:

<profile>
  <id>source-jars</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        ...

事实上,在maven-source-plugin usage page上就有这样的例子。当您需要生成工件时,请使用mvn -P source-jars(或其他)。而已!如果您只需要在发布时执行此操作,release plugin甚至可以提供一种方法来定义要在发布插件配置中使用的配置文件。

答案 1 :(得分:8)

默认情况下,您可以通过向POM添加两个配置文件来实现启用source-jars插件的实际目标。 Maven profiles documentation注意到您可以向<activeByDefault>true</activeByDefault>部分添加元素activation,并说明

  

除非使用上述方法之一激活同一POM中的其他配置文件,否则此配置文件将自动为所有版本激活

因此,您可以添加两个配置文件,其中一个是activeByDefault,其中包含相关的插件,另一个可以通过任何标准方式激活(例如-P命令行)以防止默认配置文件运行。 profiles(或Maven设置或其他)中的pom.xml部分可能如下所示:

<profile>
  <id>source-jars</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        ...
      </plugin>
    </plugins>
  </build>
</profile>
<profile>
   <!-- active this profile to disable the source-jars plugin -->
   <id>no-optional-plugins</id>
</profile>

不幸的是,我无法看到一种方法可以使这种方法很好地控制多个插件 - 我认为你需要O(n^2)n插件的配置文件,但对于这个简单的情况它应该可以正常工作

Maven≥2.0.10的另一个可能更简单的选项是从上面(source-jars)得到activeByDefault个人资料,然后通过为个人资料ID添加前缀来manually deactivate the profile- CLI标记之后使用!-P

$ mvn -P !source-jars

此方法与多个插件没有相同的O(n^2)问题,但它也不太灵活,因为系统属性,环境变量,JDK版本等无法触发​​停用。