19

マルチモジュール アプリケーションがあり、このアプリの Maven サイトを生成しようとしています。

すべての子モジュールを保持する集約 POM、子モジュールのすべての共通機能を保持する継承 POM、および 20 ほどの子モジュールがあります。

これを機能させる方法の無限のオンライン例を繰り返しました。これらのいずれにおいても、この作業のマルチ モジュール部分は実行されません。子 (および集約モジュール) のターゲット/サイト フォルダーで、個々のサイト出力を正常にビルドできます。また、集約POMのターゲット/ステージングフォルダーにステージングしました。出来上がったものは良さそうです。

しかし:

子モジュールのリンクはどれも機能しません。

この問題に関するいくつかのコメントは、リンクが Web サイトとして構築されている場合にのみ機能すると述べているため、これを jetty の下で実行しようとしましたが、同じ問題で、子の index.html が見つかりません。

誰かがこの作業の例を持っていますか? そして、私がこれ以上髪を引き裂くのを避けるために(神はそれがそのままそこにあることを知っています)、実際に機能するPOMコードおよび/または正しいテストと展開に続く段階を見たいと思います.

誰でも助けることができますか?

4

9 に答える 9

10

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

これは、作業リンクを使用して temp/site に展開する必要があります。

于 2012-06-06T12:49:37.347 に答える
6

最後の解決策から1年以上経ちました。

私はこの回避策が好きではありませんでした。別の解決策が必要です。

だからここにあります:

Maven サイト プラグイン FAQ: http://maven.apache.org/plugins/maven-site-plugin/faq.html#Use_of_url

「一方、は相対リンクを構築するためにマルチモジュール ビルドで使用されます [...]。マルチ モジュール ビルドでは、親モジュールと子モジュールが異なる URL を持つことが重要です。」

すべての pom.xml で、異なる URL を使用して <distributionManagement> タグを宣言する必要があります。

親 POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/</url>
  </site>
</distributionManagement>

子 1 POM:

<distributionManagement>
  <site>
    <id>mysite</id>
    <name>My Site</name>
    <url>ftp://server.example.com/htdocs/site/one/</url>
  </site>
</distributionManagement>

子 2 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

:子 2 が子 1 を依存関係として持つ場合、ゴールパッケージが必要です。packageを使用すると、リポジトリに依存関係がないというエラーが発生することなく、ゴールサイトが実行されます。

編集: <distributionManagement> と同じパスを使用する各アーティファクトに <url> を提供する必要があります。これは、report-info-plugin で生成された index.html は <url> を使用して相対パスを計算しますが、site:stage は <distributionManagement> を使用するためです。

于 2013-09-26T12:48:51.283 に答える
4

子リンクは、 site:stageを実行する必要がある現在のプロジェクト内では機能しません。それ以外の場合は機能しません。絶対パスである必要があるターゲットの場所を定義するstagingDirectoryを定義する必要があります。

于 2012-06-01T10:43:02.020 に答える
3

これは、あなたが思っているようには機能しません。これについては、「mvn サイトを実行すると、親モジュールと子モジュールの間のリンクが機能しないのはなぜですか?」で説明されています。よくある質問。

私は Maven の専門家ではありませんが、ローカルでサイトを生成する方法は次のとおりです。

  1. <site>ルート POM で a を構成する

    <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ディレクトリの下に生成されます

于 2015-09-11T19:19:28.357 に答える
3

失われた人のためのいくつかの指針。ディレクトリを実行mvn site site:stageした後site、構成されたサイトはディレクトリに含まれなくなりますstagingMaven サイト プラグインの使用ページによると、サイトがデプロイされるまで構成は行われません。mvn site:deployステージング後、作成したサイトを、distributionManagement で定義した URL で指定された場所にコピーするために 呼び出すことができます

<distributionManagement>
  <site>
    <id>website</id>
    <url>file://${project.build.directory}/completesite</url>
  </site>
</distributionManagement> 

この場合、完成したサイトはcompletesite、プロジェクトのビルド ディレクトリ (通常はtargetディレクトリ) 内のディレクトリになります。

于 2016-04-06T08:41:04.817 に答える
0

http://wiki.bitplan.com/index.php/Multi-Module_Maven_with_github_pagesでは、github-pages のコンテキストで詳細な分析と例を見つけることができます。github ページで mvn site-deploy を使用するマルチモジュールの例も参照してください。

回避策は何ですか?

  • プラグインを使用しないでください!
  • git clone または gh-pages をローカル フォルダーにプルします。
  • mvn site:一時ステージング ディレクトリへのステージング
  • 結果を git ローカル フォルダーに rsync します
  • ローカル フォルダをチェックインする
  • コーヒーを飲むかビールを飲む/幸せになる

    プラグインを使用しないでください!

  • 遅いです (サンプル プロジェクトの場合は 18 分)。

  • 信頼性がありません (500 HTML Codes のように)

  • よく維持されていません ([ https://github.com/github/maven-plugins/issues 2018-08 時点で 57 の未解決の問題] のように)

  • それは不必要です(以下を参照)コミッターでさえもう使用していません(今日私が受け取った個人的なメールのように..)
#
# 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
}
于 2018-08-24T12:21:14.310 に答える