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