Maven的组合站点/部署目标

时间:2009-07-26 15:38:57

标签: maven-2

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

mvn clean site deploy

这意味着单元测试运行两次,一次用于站点生命周期,一次用于部署生命周期。如果我将站点目标配置为绑定到标准生命周期,则测试仍然运行两次,运行站点目标始终会导致测试因 @requiresDependencyResolution test 注释而运行。如果您只是创建站点,这很好,但在部署环境中,它会大大增加构建时间,从而无益。

我有一个解决方法,涉及将SiteMojo(和所需的父项)复制到新插件并从副本中删除 @requiresDependencyResolution test 注释。

此修改后的mojo将生成报告而不强制再次运行测试,但我更喜欢不涉及任何网站插件黑客攻击的解决方案。有没有办法来抑制requiresDependencyResolution注释?

3 个答案:

答案 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部署”时自动执行网站操作。命令,以及确保测试套件只执行一次。