多模块的maven站点

时间:2011-05-12 09:42:46

标签: maven-2 maven-site-plugin

我有一个包含大量子模块的maven项目,我使用父pom来控制插件目录,如下所示

-pom.xml (parent pom)
 +- submodule1
 +- submodule2
 +- src\site\site.xml

因此src\site\site.xml包含自定义菜单,如下所示

<project>
  ....
  <body>
   <menu name="Overview">
    <item name="Introduction" href="introduction.html"/>
   </menu>
   <menu name="Development">
      <item name="Getting started" href="designenv.html"/>
      <item name="FAQ" href="designfaq.html" />
      <item name="Javadoc" href="apidocs/index.html" />
   </menu>
   <menu ref="modules"/>
   <menu ref="reports"/>
 </body>
</project>

我在root中运行mvn site:stage(从maven site plugin建议)后,父网页很好,而<sub-modules>\index.html不包含任何菜单(没有项目信息和项目报告) )

另外我注意到如果我在子模块下运行mvn site,则index.html左边不包含任何菜单,而个别html存在于目录中,如pmd.html,license.html

  • 我是否需要在每个子模块或其他更好的方式中添加src\site\site.xml
  • 或者我在pom.xml某处做过蠢事吗?

任何提示?

[更新]也喜欢横幅图片,如果我像这样设置父母

<bannerLeft>
  <name>edcp</name>
  <src>images/mylogo.png</src>
</bannerLeft>

指向错误方向的子模块网站(html)看起来像..\..\<submodule>,而不是..\images\mylogo.png

4 个答案:

答案 0 :(得分:4)

如果您想避免手动将site.xml复制到每个子模块,那么使用maven-resources-plugin可能是一种解决方法:将其添加到您的父pom:

[...]
<properties>
    <site.basedir>${project.basedir}</site.basedir>
</properties>
[...]
<build> 
 <plugins>
  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
      <execution>
        <id>copy-sitedescriptor</id>
        <!-- fetch site.xml before creating site documentation -->
        <phase>pre-site</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/src/site/</outputDirectory>
          <resources>          
            <resource>                  
              <directory>${site.basedir}/src/site/</directory>
              <includes>
                <include>**/site.xml</include>
              </includes>
            </resource>
          </resources>              
        </configuration>            
      </execution>
    </executions>
   </plugin>        

和你的每个子模块poms:

<properties>
    <site.basedir>${project.parent.basedir}</site.basedir>
</properties>

然后,在创建站点文档之前,站点描述符将从父项目复制到每个子模块(覆盖现有描述符)。请注意,src / site目录必须存在于每个子模块中才能使其工作。不是一个完美的解决方案,但可能比一个完整的手动解决方案更好。

答案 1 :(得分:4)

可以使用site.xml属性从父inherit继承菜单。

E.g,

<project>
  ....
  <body>
   <menu name="Overview" inherit="top">
    <item name="Introduction" href="introduction.html"/>
   </menu>
   <menu name="Development" inherit="top">
      <item name="Getting started" href="designenv.html"/>
      <item name="FAQ" href="designfaq.html" />
      <item name="Javadoc" href="apidocs/index.html" />
   </menu>
   <menu ref="modules"/>
   <menu ref="reports"/>
 </body>
</project>

现在所有子项目都会继承OverviewDevelopment菜单。

有关详细信息,请参阅多模块网站的Maven文档, http://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html#Inheritance

答案 2 :(得分:2)

我在尝试生成一个多模块maven网站时偶然发现了这一点,并且想要分享我想出的解决方案。

在您的父pom中添加

<siteDirectory>${session.executionRootDirectory}/src/site</siteDirectory>

到maven网站插件配置。

这应该告诉所有子poms从父目录获取他们的site.xml。

答案 3 :(得分:0)

我正在使用一个小的Python脚本来创建模板中的所有site.xml文件。 Here is the gist