在CI服务器上运行Maven构建时,我会生成站点以发布文档和报告,并将工件部署到快照存储库以供其他项目使用。为此,我实现了以下目标:
mvn clean site deploy
这意味着单元测试运行两次,一次用于站点生命周期,一次用于部署生命周期。如果我将站点目标配置为绑定到标准生命周期,则测试仍然运行两次,运行站点目标始终会导致测试因 @requiresDependencyResolution test 注释而运行。如果您只是创建站点,这很好,但在部署环境中,它会大大增加构建时间,从而无益。
我有一个解决方法,涉及将SiteMojo(和所需的父项)复制到新插件并从副本中删除 @requiresDependencyResolution test 注释。
此修改后的mojo将生成报告而不强制再次运行测试,但我更喜欢不涉及任何网站插件黑客攻击的解决方案。有没有办法来抑制requiresDependencyResolution注释?
答案 0 :(得分:3)
我很惊讶这项工作 - @requiresDependencyResolution test
标记实际上并没有触发正在构建的测试 - 这应该是您已经包含的报告之一。通常,我建议在CI中使用单独的Maven执行运行站点和构建,这样您就可以获得有关构建的快速反馈,并仅在成功时发布最新站点。
另一种方法是将其作为mvn clean deploy site
运行,并为report-only
选择surefire-report-maven-plugin
mojo(这通常是再次运行测试的报告)。这将使用以前的测试结果。当然,另一种选择是完全禁用该报告,因为您可能会从其他来源(例如CI服务器)获得这些结果。
答案 1 :(得分:1)
我目前的方法是使用maven-site-plugin创建一个包含相关类型副本的新插件。除了更改类型名称,目标名称和删除 @requiresDependencyResolution测试注释之外,这些类型与标准版本相同。
复制的类型是:
org.apache.maven.plugins.site.AbstractSiteMojo
org.apache.maven.plugins.site.AbstractSiteRenderingMojo
父mojos是必需的,因此Maven可以处理基于javadoc的注释(Maven 2.2.0 +不需要这样做)。
org.apache.maven.plugins.site.SiteMojo
org.apache.maven.plugins.site.SiteJarMojo
这两个分别被复制为SiteOnlyMojo和SiteJarOnlyMojo,SiteJarOnlyMojo被更改为从SiteOnlyMojo继承。否则,唯一的更改是更改目标名称并删除注释。
所以SiteOnlyMojo有:
* @goal site
* @requiresDependencyResolution test
更改为:
* @goal site-only
和SiteJarOnlyMojo有:
* @goal jar
* @phase package
更改为:
* @goal jar-only
* @phase package
这些类型在maven-plugin项目中使用artifactId maven-site-only-plugin声明,并在适当的站点插件上声明了依赖项。
要使用它,我定义一个配置文件(我不希望报告在每次执行时运行,只有在命令行上声明-Psite时)并将其绑定到 prepare-package 阶段(在2.1.0之前,您必须将其绑定到包阶段)。
<profile>
<id>site</id>
<build>
<plugins>
<plugin>
<artifactId>maven-site-only-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>jar-only</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
答案 2 :(得分:0)
<build>
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.2</version>
<executions>
<execution>
<goals>
<goal>site</goal>
<goal>deploy</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
...
</plugins>
</pluginManagement>
</build>
这将在发布“mvn部署”时自动执行网站操作。命令,以及确保测试套件只执行一次。