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

Dea*_*lze 33 maven-2

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

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

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

在maven中执行此操作的"正确"方法是什么?

Zac*_*son 39

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

<profile>
  <id>source-jars</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        ...
Run Code Online (Sandbox Code Playgroud)

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

  • 在许多情况下,默认情况下需要启用插件并使用配置文件禁用插件.我认为这个答案可以避免问题而不解决它. (3认同)

And*_*lay 9

默认情况下,您可以通过向POM添加两个配置文件来实现启用source-jars插件的实际目标.在Maven的配置文件文档指出,可以在一个元素添加<activeByDefault>true</activeByDefault>activation部分并指出

除非使用前面描述的方法之一激活同一POM中的另一个配置文件,否则此配置文件将自动为所有版本激活

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

Maven≥2.0.10的另一个可能更简单的选项是source-jars从上面(静止activeByDefault)获得配置文件,并在需要时通过在CLI标志之前-!之后为配置文件ID加前缀来手动停用配置文件-P:

$ mvn -P !source-jars
Run Code Online (Sandbox Code Playgroud)

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