我有一个多模块应用程序,我想生成该应用程序行家网站。
我有一个聚集POM保存所有的子模块,继承POM包含所有的共同特征的子模块和20个左右的子模块。
我有过怎样得到这个工作无穷无尽的网上例子循环。 在没有这些做这项工作的多模块部分。 我可以在单个站点输出建行,在孩子们的目标/站点文件夹(和聚合模块)。 我也有IT集结成聚集POM目标/暂存文件夹。 创建的东西看起来不错。
但
子模块的无联系工作。
我已经试过在码头上运行这一点,因为在这个问题上一些评论说的链接,只有当它的建成为一个网站的工作 - 但没有,同样的问题,它无法找到孩子的index.html的。
有没有人有这方面的工作的例子吗? 并避免撕裂我的任何多发(天知道它的运行了那里,因为它是)我宁愿看到实际的工作POM代码和/或阶段遵循正确的测试和部署。
任何人都可以帮忙吗?
Answer 1:
我发现了一个“简单”的方案来配置阶段目标。 它会自动汇总各模块的文档中的$ {} project.baseURI /目标/脚手架文件夹。 关键是要在所有子模块的父POM补充一点:
<distributionManagement>
<site>
<id>${project.artifactId}-site</id>
<url>${project.baseUri}</url>
</site>
</distributionManagement>
运行
mvn clean site site:stage
从POM aggreator然后在目标/脚手架文件夹的样子。 您将有子模块的文档正确链接!
我希望它会提高你的网站的一代!
Answer 2:
OK,终于得到了这个工作。
这(只)添加到父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>
这增加了母公司的分销管理部分:
<site>
<id>${project.artifactId}-site</id>
<url>./</url>
</site>
然后运行
mvn site site:stage
这应该部署到温度/现场与工作联系。
Answer 3:
现在是一年多以来的最后解决方案。
我不喜欢这个解决办法,必须有另一种解决方案“Maven的方式”。
所以在这里,它是:
在Maven插件网站FAQ: http://maven.apache.org/plugins/maven-site-plugin/faq.html#Use_of_url
“在另一方面中,在一个多模块构建用于构建相对链接[...]。在多模块建立它的父和子模块,以具有不同的网址是很重要的。”
您必须声明与不同的URL每pom.xml中<distributionManagement>标签:
父POM:
<distributionManagement>
<site>
<id>mysite</id>
<name>My Site</name>
<url>ftp://server.example.com/htdocs/site/</url>
</site>
</distributionManagement>
儿童一个POM:
<distributionManagement>
<site>
<id>mysite</id>
<name>My Site</name>
<url>ftp://server.example.com/htdocs/site/one/</url>
</site>
</distributionManagement>
儿童两个POM:
<distributionManagement>
<site>
<id>mysite</id>
<name>My Site</name>
<url>ftp://server.example.com/htdocs/site/two/</url>
</site>
</distributionManagement>
现在的要求生成的网站,以及升级工作。 分阶段网站是在生成parent/target/staging
您可以提交其他临时目录与-D
mvn -DstagingDirectory=D:/Temp/Site package site site:stage
注 :需要进球包 ,如果儿童两个孩子有一个作为依赖。 随着包 ,目标网站没有一个关系在仓库丢失的错误执行。
编辑 :有必要对使用相同pathes如在<distributionManagement>每个工件提供一个<URL>。 这是,因为用的index.html报告-INFO-插件生成使用<链接>计算相对pathes,但网站:阶段使用<distributionManagement>。
Answer 4:
孩子的链接不会对当前项目中工作,你需要做一个网站的阶段 ,否则将无法正常工作。 您需要定义定义必须是一个绝对路径的目标位置stagingDirectory。
Answer 5:
这并不完全工作,你会怎么认为它会。 这是在描述为什么不父和子模块之间的联系工作时,我跑“MVN网站”? 常问问题。
我不是在Maven的专家,但我这是怎么得到了一个网站,在本地生成:
配置<site>
在你的根POM
<distributionManagement> <site> <id>internal.repo</id> <name>Temporary Staging Repository</name> <url>file://${project.build.directory}/mvn-repo</url> </site> </distributionManagement>
建立网站为您的项目
mvn site
生成的本地临时网站 。 这会“部署生成的站点到基于POM的部分指定的站点URL一个局部分期或模拟目录”。
mvn site:stage
默认情况下,该网站将在下面生成${project.build.directory}/staging
目录
Answer 6:
有些指针丢失。 运行后mvn site site:stage
的site
目录将不包含由网站,这将是在staging
目录中。 按照Maven站点插件使用页面组成没有做,直到现场部署。 升级后,你可以调用mvn site:deploy
到由网站复制到您在distributionManagement定义URL中指定的位置
<distributionManagement>
<site>
<id>website</id>
<url>file://${project.build.directory}/completesite</url>
</site>
</distributionManagement>
在这种情况下完成的网站将在目录中结束completesite
项目build目录(通常是target
目录)。
Answer 7:
我有一个类似的案件的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
和url
元素。 我在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>
行家计算正确的值foo.site.url
在fooParent和模块1: file://somePath/foo/fooParent
和file://somePath/foo/module1
分别。 然而,顶级站点不包含正确链接到Module,除非完全相同的网址/ distributionManagement块在孩子重复。 看来,现场发电,不考虑实际的URL值(即使它们是当我看到在有效的POM描述的情况有所不同)检查继承的配置。 我发现这是非常不直观。
我需要一个更config元素,以获得顶级网站extraModule正确链接: topSiteURL
。 我增加了以下内容extraModule的POM。 请注意我只是提取的网址的基本部分(包括顶层目录)到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
,所有环节的工作。
Answer 8:
在http://wiki.bitplan.com/index.php/Multi-Module_Maven_with_github_pages你会发现在GitHub上的页面背景进行详细的分析和实例。 另请参见使用MVN的多模块例如与GitHub的网页站点部署
请告诉我变通?
#
# createSite
# ws: global variable pointing to workspace
# param 1: l_project - project name/directory
# param 2: l_ghpages - directory where gh-pages branch has been git cloned/pulled
# param 3: l_modules - non-empty for a multi-module project (e.g. containing the list of modules)
#
createSite() {
local l_project="$1"
local l_ghpages="$2"
local l_modules="$3"
color_msg $green "creating site for $l_project $l_modules"
cd $ws/$l_project
stage=/tmp/stage$$
sitelog=/tmp/sitelog$$.txt
rm -rf $stage
# the stagingDirectory needs to be subdirectory
mkdir -p $stage/$l_project
# run the staging of the site against this directory and log the results
mvn -U clean install site site:stage -DstagingDirectory=$stage/$l_project | tee $sitelog
# rsync the result into the github-pages folder
rsync -avz --del $stage/* $l_ghpages/$l_project/
# is this a multi module project?
if [ "$l_modules" != "" ]
then
cd $l_ghpages/$l_project/
if [ ! -f index.html ]
then
cat << EOF > index.html
<!DOCTYPE html>
<html>
<head>
<!-- HTML meta refresh URL redirection -->
<meta http-equiv="refresh"
content="0; url=./$l_project/$l_project/index.html">
</head>
<body>
<p>This is a multimodule mvn site click below to get to the index.html of
<a href="./$l_project/$l_project/index.html">$l_project</a></p>
</body>
</html>
EOF
fi
# add potentially new files
git add *
# commit results
git commit -m "checked in by checksite script"
# push results
git push
fi
if [ "$debug" = "false" ]
then
rm -rf $stage
rm $sitelog
fi
}
文章来源: Multi module POM - creating a site that works