当运行一个Maven构建CI服务器上,我产生了网站发布的文件和报告,并部署神器供其他项目使用快照库。 要做到这一点,我跑了如下目标:
mvn clean site deploy
这意味着单元测试的部署生命周期运行两次 ,一次为网站的生命周期和一次。 如果我配置站点的目标绑定到标准的生命周期测试仍在运行两次,运行网站的目标总是导致检测,因为@requiresDependencyResolution测试注释的运行。 这是好的,如果你只创建网站,但在部署的背景下,大大增加了制作时间没有好处。
我有一个涉及复制SiteMojo(和所需的家长),以一个新的插件以及除去副本@requiresDependencyResolution测试注释的解决方法。
这种改进的魔力会生成报表,而无需迫使测试再次运行,但我宁愿不涉及网站插件的任何黑客攻击的解决方案。 有没有办法来抑制requiresDependencyResolution注解?
我很惊讶这个工作-在@requiresDependencyResolution test
标签实际上不触发测试正在建造-这应该是的,你已经包括了一个报告。 通常情况下,我建议运行的网站,并构建在CI单独Maven的执行,因此您可以在您的构建得到快速反馈和发布成功,只有当最新的网站。
另一种方法是运行它mvn clean deploy site
,并选择report-only
为魔力surefire-report-maven-plugin
(这通常是再次运行测试报告)。 这将使用以前的测试结果。 当然,另一种选择是完全禁用该报告,因为你可能会得到来自其他来源的这些结果如你CI服务器反正。
我目前的做法是创建从Maven的网站插件相关类型的副本,新的插件。 这些类型是除了改变类型名称,目标名称和去除@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继承。 否则,只有变化是改变目标namess并删除注释。
所以SiteOnlyMojo有:
* @goal site
* @requiresDependencyResolution test
变成:
* @goal site-only
和SiteJarOnlyMojo有:
* @goal jar
* @phase package
变成:
* @goal jar-only
* @phase package
这些类型与artifactId的Maven的站点仅-插件与正确的网站插件声明的依赖性的Maven的插件项目申报。
要使用此我定义配置文件(我不想在每次执行的,只有当-Psite在命令行上声明运行报告),并将其绑定到准备封装阶段(之前的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>
<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部署”命令时,以及确保测试套件只执行一次,这将自动执行该网站的行动。