Maven 2 Maven的站点/部署组合目标

Maven 2 Maven的站点/部署组合目标,maven-2,Maven 2,在CI服务器上运行Maven构建时,我生成站点以发布文档和报告,并将工件部署到快照存储库中,供其他项目使用。为此,我运行以下目标: mvn clean site deploy 这意味着单元测试将运行两次,一次用于站点生命周期,一次用于部署生命周期。如果我将站点目标配置为绑定到标准生命周期,则测试仍会运行两次,运行站点目标始终会导致测试运行,因为@requiresDependencyResolution测试注释。如果您只创建站点,那么这很好,但是在部署的上下文中,它会大大增加构建时间,而不会带来

在CI服务器上运行Maven构建时,我生成站点以发布文档和报告,并将工件部署到快照存储库中,供其他项目使用。为此,我运行以下目标:

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部署”命令时自动执行站点操作,并确保测试套件只执行一次