Maven 2 使用maven概要文件控制构建执行

Maven 2 使用maven概要文件控制构建执行,maven-2,Maven 2,我需要修改大型项目的maven构建,以跳过典型开发构建期间的某些步骤(即不要构建*-source.jar文件)。我搜索了maven的“条件执行”,但没有找到任何东西 开发人员配置文件听起来像是一种直观的方法,但我不知道maven有多直观。配置文件的文档显示了如何为不同的配置文件设置不同的属性(即数据库连接参数)。我想我可以设置一个属性,然后测试该属性是否在maven source plugin-executions-execution标记中设置 这是在maven中执行条件执行的正确方法吗 在ma

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

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

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


在maven中,“正确”的方法是什么?

您的想法有点倒退:让配置文件启用行为,而不是禁用它。这正是配置文件最擅长的,也是您的情况:您只希望在某些情况下运行这些步骤。所以你可能会有这样的想法:

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

源罐
org.apache.maven.plugins

. 当您需要生成您的工件时,请使用mvn-P源JAR(或其他任何东西)。就这样!如果您只需要在发布时执行此操作,甚至提供了一种方法来定义要在发布插件配置中正确使用的配置文件。

您可以通过向POM添加两个配置文件来实现默认启用源jars插件的实际目标。注意:您可以将元素
true
添加到
activation
部分,并声明

除非使用上述方法之一激活同一POM中的另一个配置文件,否则此配置文件将自动对所有构建激活

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

<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)
问题,但它也不太灵活,因为系统属性、环境变量、,JDK版本等。

我们的POM是在默认情况下运行maven source插件的地方编写的,因此我必须按照您的建议重新构造它们。在许多情况下,插件需要在默认情况下打开,并使用配置文件禁用。我认为这个答案在没有解决问题的情况下避免了问题。@Mowgli但是maven profile系统并不适合这个问题:只有一个“激活”机制,而不是一个“去激活”机制。一些插件通过建立自己的失活机制来处理这个问题(例如surefire插件的skipTests)。“不,你实际上不想要有条件的构建,你真的想要这里这个颠倒的东西,它需要你重新装备你的整个构建系统!看,这是不是太棒了?”回答没有问题,提醒你,我+1'ed了。@wberry呃,也许吧。正如我上面所说的,maven概要文件系统对于有条件的构建是很好的。。。通过有条件地启用内容。如果您想有条件地启用和禁用这些东西,我怀疑您的构建系统将需要随着时间的推移而增加维护工作。这些天来,对maven的大多数反对意见听起来像是“我想创建自己的构建系统!”但感谢+1:)
$ mvn -P !source-jars