使菜单继承在多模块Maven站点中工作

时间:2014-02-22 00:38:39

标签: maven inheritance pom.xml maven-site-plugin

我有一个关于使用父POM文件和子模块构建Maven站点的问题。当从父POM继承菜单时,我无法在继承的模块站点中获取相对链接。

我的项目结构如下:

modules/pom.xml
    parent/
    module1/
    module2/
    etc.

因此,使用此配置,我最终得到一个类似于以下网站:

base-site/ 
    module1/
    module2/

来自modules / pom.xml的reactor构建生成顶级网站,每个模块也有一个站点生成。

每个模块都从父级继承此site.xml文件(例如):

<project>
    <body>
        <menu name="Module" inherit="top">
            <item name="Summary" href="./project-summary.html"/>
        </menu>
        <menu name="Module" ref="reports" inherit="bottom" />
    </body>
</project>

引用标准Maven生成的“报告”的菜单工作正常。

但是href to project-summary.html最终指向顶级站点,而不是孩子。

我在Stackoverflow上看到了一些与构建继承菜单有关的类似问题,但是我没有找到关于如何让这些链接指向子站点中的内容而不是父站点的确切信息。我可能会误解菜单继承应该在这里完成什么。

基本上,我希望子网站中生成的内容的菜单链接如下所示:

<item name="Summary" href="./module1/project-summary.html"/>

好的,所以我想,让我尝试使用过滤来实现这一点,就像我父POM一样:

<item name="Summary" href="./${project.artifactId}/project-summary.html"/>

但这不起作用,因为父POM的名称在这里被替换而不是子项目的名称。

在这种情况下,也许我需要为每个模块站点一个自定义site.xml,但我想避免这种情况,因为有类似15个,并且它们在共享方面大致相同,大约8或9不同的(相对)菜单链接。大多数项目不需要自己的site.xml文件。理想情况下,我希望父级定义所有默认值,子POM添加一些额外的菜单。

为了做到这一点,我是否坚持使用“reports”参考及其默认布局?或者我可以将这些显式列为父级site.xml文件中的菜单项,并以某种方式使这些引用工作?

我希望这很清楚。感谢。

1 个答案:

答案 0 :(得分:0)

我和你一样需要。

我将gmaven-plugin与脚本一起使用(在生成资源阶段),在父项中进行迭代并复制当前项目中的src / site / site.xml(如果有)。

这是我的脚本(如果模块中存在&#39; readme.md&#39;文件,我只是复制一个父site.xml文件):< / p>

<plugin>
                    <groupId>org.codehaus.gmavenplus</groupId>
                    <artifactId>gmavenplus-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <phase>pre-site</phase>
                        </execution>
                    </executions>
                    <configuration>
                        <scripts>
                            <script> <![CDATA[ 
                            import java.io.BufferedWriter
                            import java.io.File
                            import java.nio.charset.Charset
                            import java.nio.file.StandardCopyOption
                            import java.nio.file.Files
                            import java.nio.file.StandardOpenOption
                            String siteXmlPath = "src/site/site.xml"
                            String readme_file = "readme.md"
                            String currentPath = "${project.basedir}"
                            if (new File(currentPath + "/" + readme_file).exists() && !(new    File(currentPath + "/" + siteXmlPath).exists())) { 
                                while (!(new File(currentPath + "/" + siteXmlPath).exists())) {
                                    currentPath = currentPath + "/.." 
                                    if (new File(currentPath + "/" + siteXmlPath).exists()) { 
                                        Files.copy(new File(currentPath + "/" + siteXmlPath).toPath(), new File("${project.basedir}/" + siteXmlPath).toPath(), StandardCopyOption.REPLACE_EXISTING)
                                        File newlyCreatedFile = new File("${project.basedir}/" + siteXmlPath)
                                        BufferedWriter newFileWriter = Files.newBufferedWriter(newlyCreatedFile.toPath(), Charset.defaultCharset(), StandardOpenOption.APPEND)
                                        newFileWriter.append("<!-- @generated -->")
                                        newFileWriter.close() 
                                    } else if (!(new File(currentPath + "/pom.xml").exists())) { break; } 
                                } 
                            } ]]>
                            </script>
                        </scripts>
                    </configuration>
                </plugin>

此致