多模块POM - 创建有效的网站

Str*_*ght 17 maven maven-site-plugin

我有一个多模块应用程序,我正在尝试为这个应用程序生成一个maven站点.

我有一个聚合POM,它包含所有子模块,一个继承POM,它包含子模块的所有常用功能,以及一个20个左右的子模块.

我已经循环了无休止的在线示例,了解如何使其工作.在这些工作中,多模块部分都没有.我可以在子目录(和聚合模块)的目标/站点文件夹中建立单独的站点输出.我还让它进入聚合POM中的目标/暂存文件夹.创建的东西看起来不错.

子模块链接都不起作用.

我试过在码头下运行这个,因为对这个问题的一些评论说这些链接仅在它被构建为网站时才起作用 - 但是没有,同样的问题,它找不到孩子的index.html.

有没有有这个工作的例子?并且为了避免我撕掉任何更多的头发(上帝知道它已经在那里运行)我宁愿看到实际工作的POM代码和/或所遵循的阶段来纠正测试和部署.

有人可以帮忙吗?

小智 12

我找到了一个"更简单"的解决方案来配置阶段目标.它将自动聚合$ {project.baseURI}/target/stagging文件夹中每个模块的文档.诀窍是在所有子模块的父pom中添加它:

  <distributionManagement>
     <site>
        <id>${project.artifactId}-site</id>
        <url>${project.baseUri}</url>
     </site>
  </distributionManagement>
Run Code Online (Sandbox Code Playgroud)

跑一个

mvn clean site site:stage 
Run Code Online (Sandbox Code Playgroud)

从pom aggreator然后看看目标/蹒跚的文件夹.您将正确链接子模块文档!

我希望它能改善您的网站生成!


Str*_*ght 9

好的,终于搞定了.

将此(仅)添加到父POM,根据需要更改暂存文件夹:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.0</version>
    <configuration>
     <stagingDirectory>C:\temp\stage</stagingDirectory>
     <reportPlugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-project-info-reports-plugin</artifactId>
         <version>2.4</version>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-javadoc-plugin</artifactId>
         <version>2.8</version>
         <configuration></configuration>
         <reportSets>
           <reportSet>
             <id>non-aggregate</id>
             <configuration>
               <!-- Specific configuration for the aggregate report -->
               <sourcepath>${project.build.sourceDirectory}/../generated</sourcepath>
             </configuration>
             <reports>
               <report>javadoc</report>
             </reports>
           </reportSet>
           <reportSet>
             <id>aggregate</id>
             <configuration>
               <!-- Specific configuration for the aggregate report -->
               <sourcepath>${project.build.sourceDirectory}/../generated</sourcepath>
             </configuration>
             <reports>
               <report>aggregate</report>
             </reports>
           </reportSet>
         </reportSets>
       </plugin>
        <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-report-plugin</artifactId>
         <version>2.6</version>
       </plugin>
     </reportPlugins>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

将其添加到父级的分发管理部分:

<site>
  <id>${project.artifactId}-site</id>
  <url>./</url>
</site>
Run Code Online (Sandbox Code Playgroud)

然后跑

mvn site site:stage
Run Code Online (Sandbox Code Playgroud)

这应该部署到具有工作链接的临时/站点.

  • url需要绝对URI (3认同)

Ste*_*fan 6

自上次解决方案以来已经过去一年多了.

我不喜欢这种解决方法,必须有另一种解决方案"maven方式".

所以这里是:

在Maven网站插件常见问题解答中:http: //maven.apache.org/plugins/maven-site-plugin/faq.html#Use_of_url

"另一方面,它在多模块构建中用于构建相对链接[...].在多模块构建中,父模块和子模块具有不同的URL非常重要."

您必须在每个pom.xml中使用不同的URL声明<distributionManagement>标记:

父POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/</url>
  </site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

Child One POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/one/</url>
  </site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

儿童两个POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/two/</url>
  </site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

现在,网站的生成和登台按要求工作.已生成分阶段的站点parent/target/staging

您可以使用-D提交另一个临时目录

mvn -DstagingDirectory=D:/Temp/Site package site site:stage
Run Code Online (Sandbox Code Playgroud)

注意:如果子项2将子项作为依赖项,则需要目标.使用,可以执行目标站点,而不会出现存储库中缺少依赖项的错误.

编辑:必须为使用与<distributionManagement>中相同的pathes的每个工件提供<url>.这是因为使用report-info-plugin生成的index.html使用<url>来计算相对路径,但site:stage使用<distributionManagement>.