构建多模块站点

在顶级项目上运行mvn site时,Maven 将为 pom 的modules部分中定义的每个模块单独构建所有站点。请注意,每个站点都是在每个单独项目的目标位置生成的。结果,不同模块之间的相对链接将不起作用。但是,当您部署或暂存站点时,它们将起作用。

暂存和部署

要预览多模块站点的整个树,您可以使用site:stage目标。这会将各个站点复制到暂存位置的适当位置。

site:deploy与site:stage做同样的事情,但使用 pom 的<distributionManagement>元素中定义的 url这通常是一个远程 url,但同时支持像scp这样的远程协议和像文件这样的本地协议。

最后,site:stage-deploy与site:deploy执行相同的操作,但使用stagingDirectory参数作为部署位置。这可用于将站点部署到远程暂存区域(site:stage始终是本地的)。

笔记:

  • 如果子项目从父 POM 继承(分发)站点 URL,它们将自动附加其artifactId以形成其有效部署位置。这适用于项目 url 和 pom 的<distributionManagement>元素中定义的 url。
  • 如果您的多模块树不遵循 Maven 约定,或者如果模块目录的命名与模块工件不同,则您必须为每个子项目指定 url。另请参阅站点插件如何使用 POM 中的 <url> 元素?.
  • 多模块构建中最顶层项目的 pom.xml 必须定义 distributionManagement URL 元素(以下称为“rootURL”)。rootURL 必须是多模块项目中最顶层的 distributionManagement URL,这意味着在多模块构建中的另一个项目中定义的任何 distributionManagement URL 都必须以 rootURL 开头并附加唯一路径(位于 rootURL“下方”)。
  • 多模块构建中的所有项目都必须根据 URL 路径定义唯一的 distributionManagement url 元素,在根 distributionManagement URL 下方/下方。
  • 如果多模块构建中的任何项目的 artifactId 和模块名称(即目录名称)不同,则必须在项目的 pom.xml 文件中定义 distributionManagement URL 元素。

遗产

站点描述符的继承方式与项目描述符的继承方式相同。如果您希望继承项目的站点描述符,则需要将其附加到项目的主工件。您使用site:attach-descriptor目标将站点描述符附加到项目的主要工件。

在 Maven 3 中,您必须自己附加站点描述符,即使对于打包设置为“pom”的项目也是如此。

默认情况下,所有父描述符设置都被继承,只有菜单例外,见下文。从正文开始,链接和面包屑累积起来包含所有父级的站点描述符链接和面包屑。如果父级包含一些面包屑而继承的站点描述符不包含,则会自动添加具有当前站点描述符名称的面包屑。

但是,也可以继承菜单。为此,请使用站点描述符中的继承属性。这可以是topbottom,指示将放置继承菜单的位置。例如:

<project>
  ...
  <body>
    ...
    <menu name="My Inherited Menu" inherit="top">
      ...
    </menu>
    ...
  </body>
  ...
</project>

汇总报告

一些报告可以针对每个模块的总和运行:这些是聚合报告。这是 maven-javadoc-plugin、maven-jxr-plugin 或 maven-checkstyle-plugin 的情况。

要从聚合报告中受益,您必须在父 pom 中配置一个 reportSet,并关闭继承以避免聚合报告在模块中运行。例如,使用 maven-jxr-report:

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>2.3</version>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <inherited>false</inherited>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>