有条件地执行Maven插件

42

我在我的 pom.xml 文件中配置了一些 Maven 插件。 我只想在运行测试时执行这些插件(可以使用 -Dmaven.test.skip=true-DskipTests 跳过测试)。

其中一个插件绑定到 process-classes 构建生命周期阶段,另一个插件绑定到 pre-integration-test 阶段。


1
我曾经遇到过类似的情况,我想在本地开发中使用一个插件(tomcat7-maven-plugin),但是在CI构建中不引用它(TeamCity仅使用Artifactory仓库中批准的构建)。我按照@tenshi的建议添加了一个具有id=localhost-server的profile元素,但是排除了activation元素。然后,我在我的settings.xml中添加了一个activeProfile元素,以便它只在我的本地环境中处于活动状态。 - Ryan Ransford
请查看我的帖子,其中有详细的示例。https://dev59.com/PGs05IYBdhLWcg3wANPj#33807842 - Abhishek2k6
2个回答

56

你可以像这样使用特殊激活条件的配置文件:

<project>
  ...
  <profiles>
    <profile>
      <id>my-test-plugins</id>

      <activation>
        <property><name>!maven.test.skip</name></property>
        <property><name>!skipTests</name></property>
      </activation>
      <build>
        <plugins>

      <!-- define your plugins here -->

        </plugins>
      </build>
    </profile>
  </profiles>
</project>

你可以在这里找到更多信息:

http://books.sonatype.com/mvnref-book/reference/profiles-sect-activation.html


感谢提供《Maven》书籍的链接。对于学习超出此处所问/回答的内容非常有帮助。 - Marcel Stör
5
如果我不想使用配置文件,而是希望使用 IF 条件语句,该怎样做呢?基本上,整个项目已经设定了一组配置文件。对于一个子模块,我需要根据当前的配置文件选择 aspect-j 插件的配置。但我不确定如何使用所提出的模型来实现。 - Zorkus
4
这真的有效吗?看起来你只能在 <activation> 中有一个 <property> 元素。 - Marplesoft
8
如果只有一个配置文件需要这个插件,那么这是可以的。但如果我需要在两个不同的配置文件中运行同一个插件,又不想复制代码怎么办? - Or Gal
3
似乎这个答案回答了如何有条件地激活一个配置文件,但那不是原来的问题。原来的问题是如何有条件地激活一个插件(配置文件中的其中一个插件,而不是所有插件)。 - inor
无法工作:/path/to/pom.xml 非可解析 POM:重复的标签:'name'。 - ach

-3

最后一个例子只有在我设置了值时才起作用:

<property>
  <name>wsdl2java</name>
  <value>true</value>
</property>

1
这不是对原问题的回答。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,一旦您拥有足够的声望,您将能够评论任何帖子 - DavidPostill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接