我需要修改大型项目的maven构建,以便在典型的开发构建期间跳过某些步骤(即不构建* -source.jar文件)。我为maven搜索了“条件执行”,但没有找到任何东西。
开发配置文件听起来像直观的方式 - 但我不知道maven是多么直观。配置文件的文档显示了如何为不同的配置文件设置不同的属性(即数据库连接参数)。我想我可以设置一个属性,然后测试该属性是否在maven-source-plugin-executions-execution标签中设置。
这是在maven中进行条件执行的正确方法吗?
在maven中执行此操作的“正确”方式是什么?
答案 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版本等无法触发停用。