1

maven-assembly-pluginを使用してマルチモジュールプロジェクト用のディストリビューションアセンブリ(フォーマット "dir")を作成しています。Maven:サイト(マルチモジュール)を含むディストリビューションアセンブリを作成します

+ my-project 
    +-- my-child-project-1 
    +-- my-child-project-2 

子プロジェクトmy-project継承:プロジェクトは、このようになります。 my-projectは集約であり、すなわち<modules>セクションの子プロジェクトを定義する。

アセンブリにはアーティファクト、ソースなどが含まれています。どのようにサイトを組み込むためにプロジェクトをセットアップする必要がありますか?

my-projectサイトの子モジュールへのリンクが必要です。私の知る限り、リンクは展開前には動作しません。したがって、まずサイトを段階的に展開する必要があると思います(?)。 docsによると、ステージングサイトを作成した後にのみ可能である:

この目標はすでに、このようなMVNサイトを呼び出すことなどによって、サイトの目標を使用して生成されているために、サイトが必要です。

どうすればこの問題を解決できますか?

1組のすべてを組み立てる方法はありますかmvn package?私のアセンブリ記述子はどのように見えるのですか?

答えて

0

これは良い解決策であるかどうかは、わかりませんが、それ以外の答えはありませんでしたので、私はこの思い付いた:アセンブリは別の子モジュール

に構築

1.移動重要:これが必要かどうかは分かりませんが、アセンブリがルートプロジェクトで構成されている場合は、それが動作するかどうかを確認する時間がありません。それ以外の場合は、手順2で別の分類子を使用してmy-projectmy-projectに依存関係を定義する必要があります。これは機能しません。私が間違っているなら、この回答を編集してください。

+ my-project 
    +-- my-child-project-1 
    +-- my-child-project-2 
    +-- my-project-build 

2.ビルドプロジェクトに分類器siteを持つすべてのモジュールの依存関係を定義

<!-- Yes, also for the parent project. However, not for the build project itself --> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>my-project</artifactId> 
    <version>${project.version}</version> 
    <classifier>site</version> 
</dependency> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>my-project</artifactId> 
    <version>${project.version}</version> 
    <classifier>site</version> 
</dependency> 
... 

3.アセンブリ・ディスクリプタでdependencySetsを定義します。サブモジュールのサイトコンテンツを、メインモジュールのサイトディレクトリのそれぞれのサブディレクトリに移動することによって、壊れたリンクを修正します。

アイデアは、site - クラシファイアの依存関係によって生成されたサイトジャーのアーティファクトを使用し、それらを解凍することです。モジュールリンクは相対的なものなので、artifactIdsで指定されたサブディレクトリにコンテンツを展開すると、それらのリンクが修正されます。

<dependencySets> 

    <dependencySet> 
     <outputDirectory>site</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
     <includes> 
      <include>*:my-project:jar:site</include> 
     </includes> 
    </dependencySet> 

    <!-- sites of sub modules --> 
    <dependencySet> 
     <includes> 
      <include>*:my-child-project-1:jar:site</include> 
      <include>*:my-child-project-2:jar:site</include> 
      <include>*:my-project-build:jar:site</include> 
     </includes> 
     <outputDirectory>site/${artifact.artifactId}</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
    </dependencySet> 

    <!-- sites of sub-sub modules (if required) --> 
    <dependencySet> 
     <includes> 
      ... 
     </includes> 
     <outputDirectory>site/${artifact.parent.artifactId}/${artifact.artifactId}</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
    </dependencySet> 

    ... 
</dependencySets> 

4.ルートプロジェクトでsite:jar目標を定義

この目標はpackage相で実行デフォルトであり、発生中の依存関係として定義されている「サイト」-attachments(例えばmy-parent-1.0.0-site.jar)、ステップ2で開梱され、ステップ3で開梱された:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-site-plugin</artifactId> 
      <version>3.4</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

5。mvn packageを実行してアセンブリを生成します

結果として、作業リンクを含む完全なサイトを含むアセンブリのサブディレクトリ "site"が作成されます。

関連する問題