我试图在maven生命周期中添加一些额外的阶段。主要是增加一些额外的测试级别:
<phases>
<phase>initialize</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>pre-application-test</phase>
<phase>application-test</phase>
<phase>post-application-test</phase>
<phase>pre-system-test</phase>
<phase>system-test</phase>
<phase>post-system-test</phase>
<phase>finalize-tests</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>上面包含了新的应用程序测试和系统测试阶段(包括前后)。
我已经在:代码动物园-生命周期-maven-plugin上启动了一个测试插件,用于测试的pom位于src/it文件夹中。
似乎是新的阶段,或有所回升,但有一些奇怪的事情正在进行:
mvn post-application-test这个很管用。另外,我为测试添加的echo插件也会被执行。但是有一些警告(使用maven 3.3.9)。
mvn install执行跳过新阶段的默认生命周期。
如果我将生命周期的id fomr“测试级别”更改为“默认”,则阶段将执行两次。
发出的警告如下:
[WARNING] Duplicated lifecycle phase package. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase pre-integration-test. Defined in default but also in test-levels
[WARNING] Duplicated lifecycle phase integration-test. Defined in default but also in test-levels
....发出此警告的源代码表示生命周期没有正确的命名空间。但我不知道是怎么做到的。
我在网络上找到了一些提示:创造一个新的阶段 (堆栈溢出)或其他插件,如maven-scm-发布插件或docker-maven-插件。但它们要么创建了一个完整的新生命周期,要么只是改变了默认maven生命周期中的插件映射。
网络上所有关于这个话题的东西似乎至少有4岁了.
所以:
测试插件在github上的当前状态。
谢谢!
发布于 2018-10-16 01:48:02
我不确定是否有可能修改开箱即用的包装类型的默认生命周期,但也有其他的选择。您可以采用定义自己的插件的方法(有或没有自定义的打包类型),也可以简单地向默认生命周期添加一些额外的测试执行。
选项1-为标准打包创建一个具有自定义生命周期的新插件
使用这种方法,您可以定义一个全新的生命周期,并显式地指定各个阶段。
优点:
缺点:
有关演练,请参阅这篇博客文章。然后,您将需要运行mvn install,而不是运行mvn custom_install。您可能会更进一步,定义您自己的自定义打包类型。
选项2-创建一个具有自定义打包类型的新插件,并定义默认的生命周期
这个可能是最接近你所采取的方法。有关示例,请参见这篇博客文章。
如果采用这种方法,除了使用<packaging>my-custom-packaging</packaging>添加插件外,您的项目只需要声明<extensions>true</extensions>。
优点:
缺点:
jar、war、ear等),则需要在插件中定义每个打包类型的自定义版本。选项3-将插件执行添加到默认生命周期中
如果您愿意在生命周期中这些测试运行时失去一些控制权,那么您可以简单地将新插件的执行绑定到默认的生命周期。我只是在寻找如何做到这一点,并通过这篇博客文章描述了一个解决方案。
优点:
缺点:
本质上,您所要做的就是定义一个新的插件执行,并在执行id前面加上default-。下面是我使用Maven故障安全插件将integration-test和verify目标添加到带有jar打包的项目的默认生命周期中的一个示例:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.1</version>
<executions>
<execution>
<id>default-system-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>当我运行mvn clean install时,执行会作为构建过程的一部分进行。
发布于 2020-02-10 05:30:09
您可以查看mvn-finisher插件,它在maven构建端添加了几个要调用的阶段(成功、失败和中断)
发布于 2022-02-22 03:48:39
build生命周期和24 phases。custom plugin,那么实现它,并将它绑定到最适合的任何phase。当然,您可以使您的项目像您想要的那样复杂,但是通常,添加生命周期和阶段被认为是错误的做法,直到您在构建生命周期的上下文中没有非常大的事情可管理。
https://stackoverflow.com/questions/36617759
复制相似问题