我尝试在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-lifecycle-maven-plugin启动了一个测试插件 我用于测试的pom位于src/it文件夹中。
似乎是新的阶段还是有所回升,但仍有一些奇怪的事情发生:
mvn post-application-test
这很有效。还添加了我为测试添加的echo插件。但是有一些警告(使用maven 3.3.9)。
mvn install
执行跳过新阶段的默认生命周期。
如果我更改生命周期的ID,那么测试级别&#34;到&#34;默认&#34;阶段执行两次。
发出的警告是:
[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
....
发出此警告的source code表示生命周期未正确命名空间。但我无法弄清楚这是怎么做的。
我在网上找到了一些提示:create-a-new-phase(Stackoverflow)或其他插件,如maven-scm-publish-plugin或docker-maven-plugin。但这些要么创建一个完整的新生命周期,要么只是从默认的maven生命周期中更改插件映射。
网络上有关此主题的所有其他内容似乎至少已有4年......
所以:
test plugin is on github的当前状态。
谢谢!
答案 0 :(得分:2)
您可以看一下the mvn-finisher plug-in,它增加了在maven构建结束时要调用的几个阶段(成功,失败和中断)
答案 1 :(得分:1)
我不确定是否可以为开箱即用的包装类型修改默认生命周期,但是还有其他选择。您可以采用定义自己的插件(带有或不带有自定义包装类型)的方法,或者可以简单地向默认生命周期添加一些额外的测试执行。
选项1-为标准包装创建具有自定义生命周期的新插件
使用这种方法,您可以定义一个全新的生命周期并明确指定阶段。
优点:
缺点:
请参阅this blog post进行演练。然后,您需要运行mvn install
,而不是运行mvn custom_install
。您可能可以更进一步,定义自己的自定义包装类型
选项2-创建具有自定义包装类型的新插件,并定义默认生命周期
这可能是最接近您所采用的方法。有关示例,请参见this blog post。
如果采用这种方法,则您的项目除添加<packaging>my-custom-packaging</packaging>
插件外,只需声明<extensions>true</extensions>
。
优点:
缺点:
jar
,war
,ear
等),则需要在您的包装中定义每种包装类型的自定义版本插件。选项3-将插件执行添加到默认生命周期
如果您希望对这些测试在生命周期中的确切时间失去控制,则可以将新插件的执行绑定到默认生命周期。我只是在寻找如何执行此操作,并遇到了this blog post描述解决方案的情况。
优点:
缺点:
基本上,您要做的就是定义一个新的插件执行,并在执行ID之前加上default-
。这是我刚刚使用Maven Failsafe Plugin进行的一个示例,将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
时,执行是构建过程的一部分。
答案 2 :(得分:0)
通常情况下,当您需要其他构建阶段时-这是信号,您需要拆分代码并将其一部分移至专用于单独功能的其他maven模块中。
在模块之间添加依赖性,因此在开始构建Maven之后,将生成模块图并按预期顺序逐一构建。