我有一个与 OP 类似的案例,但有一点不同:其中一个子模块没有从多模块项目父级继承。我想生成一个所有链接都正常工作的分阶段站点。这是项目结构:
extraParent // parent not part of this multi-module build
foo
pom.xml // aggregator
fooParent // parent for this project
module1 // inherits from fooParent
extraModule // inherits from extraParent
@Stefan 的回答是朝着正确方向迈出的一大步。特别是,我确认子模块必须重复distributionManagement
andurl
元素。我在 fooParent 中试过这个:
<properties>
<foo.site.url>file://somePath/foo/${project.artifactId}</foo.site.url>
</properties>
<url>${foo.site.url}</url>
<distributionManagement>
<site>
<id>site-docs</id>
<url>${foo.site.url}</url>
</site>
</distributionManagement>
Maven 分别计算foo.site.url
了 fooParent 和 module1:file://somePath/foo/fooParent
和的正确值file://somePath/foo/module1
。然而,顶级站点不包含到 module1 的正确链接,除非完全相同的 url/distributionManagement 块在子级中重复。似乎站点生成正在检查继承的配置而不考虑实际的 URL 值(即使它们在我查看有效 POM 时描述的情况下有所不同)。我发现这非常不直观。
我还需要一个配置元素来让顶级站点正确链接到 extraModule topSiteURL
:. 我在 extraModule 的 POM 中添加了以下内容。注意我只是将 URL 的基本部分(包括顶级目录)提取到topSiteURL
值中,然后在foo.site.url
属性中使用它。
<properties>
<topSiteURL>file://somePath/foo/</topSiteURL>
<foo.site.url>${topSiteURL}/${project.artifactId}</foo.site.url>
</properties>
<url>${foo.site.url}</url>
<distributionManagement>
<site>
<id>site-docs</id>
<url>${foo.site.url}</url>
</site>
</distributionManagement>
现在,当我使用 为多模块项目生成站点时mvn site site:stage
,所有链接都有效。