10

ここで同様の質問。

結果として得られる1つのWARを3つの異なるMavenモジュールからデプロイしたいと思います。戦争モジュールは絶対に矛盾していません:

  • JavaクラスといくつかのWEB-INF/アーティファクトを持つ最初のもの

  • 2つ目はAPI(インターフェース)であり、コンテナー内にすでに存在しているか、結果として生じる戦争の一部である必要があります(これが私が望むものです)

  • 3つ目は、実装クラス、WEB-INF /アーティファクト(Springインフラストラクチャ、web.xmlなど)です。

最初のものは、インターフェースと実装に依存します。3つ目は、インターフェイスによって異なります。

私は可能なオプションで完全に混乱しています。

これにオーバーレイを使用しますか?

または、アセンブリプラグインを使用して、2番目のクラスのクラスを統合できるようにしますか?

Cargoプラグインを使用しますか?

または、別のモジュールからwebResourcesを指定した場合、maven-war-pluginによって実行されますか?この男は私とほとんど同じようにやっていますが、2つの戦争モジュールしかなく、アセンブリプラグインもオーバーレイも使用していません。

教えてください、これはどのように適切に行われていますか?

4

1 に答える 1

10

これには、maven jar&warプラグインの少し高度な使用が必要です。

JavaクラスといくつかのWEB-INF/アーティファクトを持つ最初のもの

これがメインのWARを表しているとしましょう。maven-war-pluginのオーバーレイ機能を使用するだけです。最も基本的な方法は、戦争の依存関係を指定することです。

    <dependency>
        <groupId>${groupId}</groupId>
        <artifactId>${rootArtifactId}-service-impl</artifactId>
        <version>${version}</version>
        <type>war</type>
        <scope>runtime</scope>
    </dependency>

そして、maven warプラグインに、この依存関係のアセットをメインの戦争(現在の場所)にマージするように指示します

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <dependentWarExcludes>WEB-INF/web.xml,**/**.class</dependentWarExcludes>
        <webResources>
            <resource>
                <!--  change if necessary -->
                <directory>src/main/webapp/WEB-INF</directory>
                <filtering>true</filtering>
                <targetPath>WEB-INF</targetPath>
            </resource>
        </webResources>
    </configuration>
</plugin>

また、2番目のものへのjarタイプの依存関係を含めます(これはのJARになりますWEB-INF/lib/

    <dependency>
        <groupId>${groupId}</groupId>
        <artifactId>${rootArtifactId}-service</artifactId>
        <version>${version}</version>
        <type>jar</type>
    </dependency>

また、3番目のWARからのクラスへの依存関係を指定する必要があります。

    <dependency>
        <groupId>${groupId}</groupId>
        <artifactId>${rootArtifactId}-service-impl</artifactId>
        <version>${version}</version>
        <classifier>classes</classifier>
        <type>jar</type>
    </dependency>

分類子の注意、同じアーティファクトの2つの依存関係を指定しているため、必要です...それを機能させるには、分類子とその事実に関して、3番目のアーティファクト(warタイプのアーティファクト)にjarプラグインを設定する必要があります1つのアーティファクト(warとjar)から2つのパッケージが必要です。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <!-- jar goal must be attached to package phase because this artifact is WAR and we need additional package -->
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
            <!-- 
                classifier must be specified because we specify 2 artifactId dependencies in Portlet module, they differ in type jar/war, but maven requires classifier in this case
            -->
                <classifier>classes</classifier>
                <includes>
                    <include>**/**.class</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2011-10-26T14:17:34.183 に答える