多模块POM - 创建一个可行的网站(Multi module POM - creating a

2019-06-25 02:07发布

我有一个多模块应用程序,我想生成该应用程序行家网站。

我有一个聚集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的专家,但我这是怎么得到了一个网站,在本地生成:

  1. 配置<site>在你的根POM

     <distributionManagement> <site> <id>internal.repo</id> <name>Temporary Staging Repository</name> <url>file://${project.build.directory}/mvn-repo</url> </site> </distributionManagement> 
  2. 建立网站为您的项目

     mvn site 
  3. 生成的本地临时网站 。 这会“部署生成的站点到基于POM的部分指定的站点URL一个局部分期或模拟目录”。

     mvn site:stage 
  4. 默认情况下,该网站将在下面生成${project.build.directory}/staging目录



Answer 6:

有些指针丢失。 运行后mvn site site:stagesite目录将不包含由网站,这将是在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的回答是朝正确方向迈出的一大步。 特别是,我证实,子模块必须重复这两个distributionManagementurl元素。 我在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/fooParentfile://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的网页站点部署

请告诉我变通?

  • 不要使用插件!
  • 混帐克隆或拉GH-页面到本地文件夹
  • MVN网站:阶段到临时临时目录
  • rsync的结果纳入git的本地文件夹
  • 检查本地文件夹
  • 有一杯咖啡或喝啤酒/快乐

    不要使用插件!

  • 它很慢(如真的很慢... 18分钟示例项目)

  • 这是不可靠的(如在500个HTML代码)

  • 这不是维护良好(如[ https://github.com/github/maven-plugins/issues 57个开放式问题为2018-08]

  • 这是superflous(见下文),即使是提交者的不使用它的话(如个人邮箱今天我..)
#
# 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