11

2 つのモジュール (それぞれ独自の pom.xml を持つ) と、それらのモジュールを指す親 pom.xml を含むマルチモジュール プロジェクトがあります。

親pomで「mvn clean package」を実行すると、各プロジェクトは、独自のターゲットフォルダーの下にzipファイルになります。各モジュールの zip ファイルを含む zip ファイルを zip ファイルのルート フォルダーの下にパッケージ化したいと考えていますが、そうするといくつかの問題が発生します。

親 pom.xml フォルダーにアセンブリ ファイルを作成しました。

<!-- Release distribution -->
<assembly>
<id>release</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<fileSets>
    <fileSet>
        <directory>${basedir}/projectA/target/</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>*.tar.gz</include>
        </includes>
    </fileSet>
    <fileSet>
        <directory>${basedir}/projectB/target/</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>*.tar.gz</include>
        </includes>
    </fileSet>
</fileSets>
</assembly>

上記は機能しますが、このプロジェクトにさらに多くのモジュールを追加し始めると、このアセンブリを更新し続ける必要があり、非常に煩わしくなります。

理想的には、モジュールのすべてのターゲット フォルダーに自動的に移動し、そこに zip ファイルを取得するようにしたいと考えています。

これは、次のようにして実現できます。

...
<fileSet>
        <directory>${basedir}</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>**/target/*.tar.gz</include>
        </includes>
    </fileSet>

ただし、ここでの問題は、zip ファイルにフル パスが含まれるため、ルート フォルダー内に zip ファイルを配置するのではなく、zip ファイルに projectA/target/xxxx.zip と projectB/target/xxxx.zip が含まれることです。これはまさに私が行っていることです。ほしくない。

新しいモジュールを追加するたびに更新する必要がなく、zip 内に完全なパスがないので、maven で簡単なアセンブリを作成する方法はありますか?

編集1

これは単に不可能のようです。アセンブリを維持するのが難しい、適切に構造化された zip ファイルを取得するか、維持するのは簡単だが煩わしい構造の zip ファイルを取得します。適切な解決策が見つかるまで、これは未回答のままにします

編集2

これに対する解決策を探すことに戻ります。以下に投稿された khmarbaise ソリューションに関して、いくつかの問題があります。アセンブリに含めたいプロジェクトを指定します。ビルドするモジュールを指定する親 pom にこの情報が既にあるため、ビルドされないように親 pom からモジュールを削除すると、アセンブリは既にそれを認識しており、そのプロジェクトの選択をスキップする必要があります (理由ファイルセットは、アセンブリ zip 内のくだらない、制御不可能なパスを除いて、うまく機能しているようです)。

誰も同じような問題に遭遇したことはありませんか?

4

2 に答える 2

5

最初に、結果のパッケージを含む dist-packaging モジュールを作成することをお勧めします。さらに、他のzipファイルを含む最終アーカイブを作成するためのアセンブリ記述子が間違っているようです。

  <id>proj1-assembly</id>
  <formats>
      <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
      <dependencySet>
          <outputDirectory>/</outputDirectory>
          <useProjectArtifact>false</useProjectArtifact>
          <unpack>false</unpack>
          <scope>runtime</scope>
      </dependencySet>
  </dependencySets>

ただし、次のような通常のモジュールの依存関係と同様に、dist-module の依存関係を維持する必要があることに注意する必要があります。

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>package-one</artifactId>
      <version>${project.version}</version>
      <classifier>package-1-assembly</classifier>
      <type>zip</type>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>package-two</artifactId>
      <version>${project.version}</version>
      <classifier>package-2-assembly</classifier>
      <type>zip</type>
    </dependency>
    ....

ここでは、完全に機能する例を見つけることができます

于 2013-09-15T17:11:05.267 に答える