我尝试在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>
以上包含新的应用测试和系统测试阶段(包括前后)。
我已经在以下位置启动了一个测试插件:codezoo-生命周期-maven-plugin我用于测试的pom位于src/it文件夹中。
看起来新的阶段或有所回升,但有一些奇怪的事情正在发生:
mvn post-application-test
这行得通。我为测试添加的回显插件也被执行了。但是有一些警告(使用maven 3.3.9)。
mvn install
跳过新阶段执行默认生命周期。
如果我将生命周期的id fomr“test-level”更改为“default”,则阶段将执行两次。
发出的警告是:
[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
....
发出此警告的源代码表明生命周期没有正确的命名空间。但我不知道这是如何做到的。
我在网络上找到了一些提示:create-a-new阶段(Stackoverflow)或其他插件,如maven-scm-发布插件或docker-maven-plugin。但这些要么是创建一个完整的新生命周期,要么只是更改默认maven生命周期的插件映射。
网上关于这个话题的所有其他东西似乎都至少有4年了…
所以:
测试插件的当前状态在github上。
谢谢!
我不确定是否有可能修改开箱即用的打包类型的默认生命周期,但也有其他选择。您可以采用定义自己的插件的方法(有或没有自定义打包类型),或者您可以简单地在默认生命周期中添加一些额外的测试执行。
方案1-新建插件,为标准打包自定义生命周期
使用这种方法,您可以定义一个全新的生命周期并显式指定阶段。
优点:
缺点:
参考这篇博文来走查。然后,您需要运行mvn install
而不是运行mvncustom_install
。您可能可以更进一步,定义自己的自定义打包类型
方案2-新建插件,自定义打包类型,并定义默认生命周期
这可能是最接近你所采取的方法。例如,请参阅此博客文章。
如果你采用这种方法,你的项目只需要声明
优点:
缺点:
jar
,war
,ears
等),您需要在插件中定义这些打包类型的自定义版本。方案3-将插件执行添加到默认生命周期
如果您愿意失去对这些测试在生命周期中何时运行的控制,您可以简单地将新插件执行绑定到默认生命周期。我只是在寻找如何做到这一点,并浏览了这篇描述解决方案的博客文章。
优点:
缺点:
本质上,你所要做的就是定义一个新的插件执行,并在执行id前面加上default-
。这是我刚刚用Maven FailsafPlugin做的一个例子,将集成测试
和验证
目标添加到带有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清洁安装
时,执行作为构建过程的一部分发生。
你可以看看mvn-finisher插件,它增加了在maven构建端上调用的几个阶段(用于成功、失败和中断)
build
生命周期,其中24个阶段
自定义插件
并将其绑定到最合适的任何阶段
。当然,您可以让您的项目尽可能复杂,但通常认为添加生命周期和阶段是不好的做法,直到您在构建生命周期的上下文中没有非常大的事情要管理。