2011-01-13 55 views
27

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

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

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

什么是“正确”的方式来做到这一点在maven中?

回答

33

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

<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-jar(或其他)。而已!如果您只需要在发布时执行此操作,则release plugin甚至可以提供一种方法来在发布插件配置中定义要正确使用的配置文件。

+0

我们的poms是在默认运行maven-source-plugin的地方编写的,所以我必须按照您的建议重新构建它们。 – 2011-01-14 16:33:30

+3

在很多情况下,插件可以默认启用并且使用配置文件禁用。我认为这个答案避免了解决这个问题。 – Kevin 2014-02-10 02:25:56

6

您可以通过将两个配置文件添加到您的POM来实现默认启用source-jar插件的实际目标。该Maven profiles documentation指出,可以在一个元素<activeByDefault>true</activeByDefault>添加到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)配置文件n插件,但对于这种简单的情况下,它应该很好。

与Maven≥2.0.10另一种可以简单的选择是只从上面(仍activeByDefault)的source-jars轮廓,并manually deactivate the profile当你想通过之后-P CLI标志与前缀或-!配置文件ID:

$ mvn -P !source-jars 

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

相关问题