2

サブモジュールの 1 つに分類子がある場合、maven マルチモジュール プロジェクトをどのようにリリースしますか?

このユースケースを考えると:

  • マルチモジュール プロジェクト: EAR、WAR、interface-jar、extension-AA-jar、extension-BB-jar、utility-jar
  • すべての JAR を 1 回だけビルドする必要があります (または、同じアーティファクトを同じバージョンでデプロイすることは禁止されているため、リポジトリにデプロイするのは少なくとも 1 回だけです)。
  • WAR は、extension-AA-jar で 1 回、extension-BB-jar で 1 回、2 つの異なるセットアップ用にビルドする必要があります。
  • これら 2 つのビルドの違いを生むのは、1 つのextension-XX-jarだけです。
  • リポジトリ内の 2 つの最終成果物を分類子 (AA|BB) で区別したい
  • また、WAR の 1 つだけを含む EAR が 2 つあるはずです (これも同じ分類子によって識別されます)。
  • 内容は 100% 同じであるため、2 つの WAR/EAR に追加のプロジェクトは必要ありません。

したがって、目標は、最後にリポジトリに次のものを含めることです (2 つの release:prepare、release:perform の後):

  • EAR-1-AA.耳
  • EAR-1-BB.ear
  • WAR-1-AA.war
  • WAR-1-BB.war
  • インターフェイス-1.jar
  • 拡張機能-1-AA.jar
  • extension-1-BB.jar
  • utility-1.jar

リリース ビルドの方法については多くの説明があり、分類子の使用方法の例もありますが、分類子はマルチモジュール セットアップでは使用されないようです。

注: 新しいバージョンのアーティファクトがまだデプロイされていないため、通常、最初のリリースは問題になりません。しかし、2 番目の分類子のリリースを行うと、maven が同じバージョンで jar を再度ビルドおよびデプロイしようとし、リポジトリが (うまくいけば) それを許可しないため、すべてが中断されます。アーティファクトを一意に識別するために分類子が考慮されるため、これは WAR および EAR の問題ではありません。

それとも、分類子は単一モジュール プロジェクトでのみ使用することを意図したものですか?

4

1 に答える 1

2

これは、Maven ではかなりトリッキーです。Maven ライフサイクルのパッケージ フェーズ内で、maven-[jar/war/ear]-plugins の複数の実行を試みることができます。実行ごとに、異なる分類子を設定できます。

さらに、maven-war-plugin の実行では、 を使用<overlay>して、正しい分類子を持つ拡張子を WAR ファイルに取得できます。maven-ear-plugin の実行では、WAR ファイルを正しい分類子で指定できます<webModule>

拡張モジュールでは、次のように maven-jar-plugin を構成できます。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <executions>
        <execution>
          <id>extension-AA</id>
          <phase>package</phase>
          <goals>jar</goals>
          <configuration>
            <classifier>AA</classifier>
          </configuration>
        </execution>
        <execution>
          <id>extension-BB</id>
          <phase>package</phase>
          <goals>jar</goals>
          <configuration>
            <classifier>BB</classifier>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
  ...
</build>

WAR モジュールの構成は非常に似ています。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <executions>
    <execution>
      <id>extension-AA</id>
      <phase>package</phase>
      <goals>
        <goal>war</goal>
      </goals>
      <configuration>
        <overlays>
          <overlay>
            <groupId>com.example</groupId>
            <artifactId>extension-1</artifactId>
            <classifier>AA</classifier>
          </overlay>
        </overlays>
      </configuration>
    </execution>
    <execution>
      <id>extension-BB</id>
      <phase>package</phase>
      <goals>
        <goal>war</goal>
      </goals>
      <configuration>
        <overlays>
          <overlay>
            <groupId>com.example</groupId>
            <artifactId>extension-1</artifactId>
            <classifier>BB</classifier>
          </overlay>
        </overlays>
      </configuration>
    </execution>
  </executions>
</plugin>

そして最後に、EAR モジュールの構成:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-ear-plugin</artifactId>
  <executions>
    <execution>
      <id>extension-AA</id>
      <phase>package</phase>
      <goals>
        <goal>ear</goal>
      </goals>
      <configuration>
        <classifier>AA</classifier>
        <modules>
          <webModule>
            <groupId>com.example</groupId>
            <artifactId>war-1</artifactId>
            <classifier>AA</classifier>
          </webModule>
        </modules>
      </configuration>
    </execution>
    <execution>
      <id>extension-BB</id>
      <phase>package</phase>
      <goals>
        <goal>ear</goal>
      </goals>
      <configuration>
        <classifier>BB</classifier>
        <modules>
          <webModule>
            <groupId>com.example</groupId>
            <artifactId>war-1</artifactId>
            <classifier>BB</classifier>
          </webModule>
        </modules>
      </configuration>
    </execution>
  </executions>
</plugin>
于 2012-08-02T14:44:10.600 に答える