Maven的组合站点/部署目标

Ric*_*ler 5 maven-2

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

mvn clean site deploy
Run Code Online (Sandbox Code Playgroud)

这意味着单元测试运行两次,一次用于站点生命周期,一次用于部署生命周期.如果我将站点目标配置为绑定到标准生命周期,则测试仍然运行两次,运行站点目标始终会导致测试因为@requiresDependencyResolution测试注释而运行.如果您只是创建站点,这很好,但在部署的上下文中,它大大增加了构建时间,没有任何好处.

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

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

Ric*_*ler 1

我当前的方法是使用 maven-site-plugin 中相关类型的副本创建一个新插件。除了更改类型名称、目标名称和删除@requiresDependencyResolution 测试注释之外,这些类型与标准版本相同。

复制的类型有:

org.apache.maven.plugins.site.AbstractSiteMojo
org.apache.maven.plugins.site.AbstractSiteRenderingMojo
Run Code Online (Sandbox Code Playgroud)

需要父 mojos,以便 Maven 可以处理基于 javadoc 的注释(对于 Maven 2.2.0+ 来说这不应该是必需的)。

org.apache.maven.plugins.site.SiteMojo
org.apache.maven.plugins.site.SiteJarMojo
Run Code Online (Sandbox Code Playgroud)

这两个分别复制为 SiteOnlyMojo 和 SiteJarOnlyMojo ,SiteJarOnlyMojo 改为继承自 SiteOnlyMojo 。否则,唯一的更改是更改目标名称并删除注释。

所以 SiteOnlyMojo 有:

* @goal site
* @requiresDependencyResolution test
Run Code Online (Sandbox Code Playgroud)

变成:

* @goal site-only
Run Code Online (Sandbox Code Playgroud)

和 SiteJarOnlyMojo 具有:

* @goal jar
* @phase package
Run Code Online (Sandbox Code Playgroud)

变成:

* @goal jar-only
* @phase package
Run Code Online (Sandbox Code Playgroud)

这些类型在 maven-plugin 项目中使用 artifactId maven-site-only-plugin 进行声明,并在正确的站点插件上声明依赖项。

为了使用它,我定义了一个配置文件(我不希望每次执行时都运行报告,只有在命令行上声明 -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>
Run Code Online (Sandbox Code Playgroud)