9

私は現在この設定をしています:

プロジェクトAはwarファイルを出力します-構成ファイル(WEB-INF / web.xml)があります。プロジェクトが特定の環境にデプロイされると手動でコメント解除される構成のコメント化されたセクションでこれを提供してきました。

プロジェクトのニーズは変化しました-そして私はプロジェクトAを構成のそのセクションなしで完全に構築する必要があります。そして、構成のそのセクションで構築する別のプロジェクト(プロジェクトB)が必要です(有効化され、コメントアウトされていません)。

ファイルを両方のプロジェクトに存在させる(デュアルメンテナンス)のではなく、プロジェクトBをプロジェクトAに依存させ(warオーバーレイを介して)、maven-config-processor-pluginを使用して特別な構成をWEBに追加できることを望んでいました。 -INF / web.xmlを実行してから、warファイルを再パッケージ化します。

これは機能していないようですが、ターゲットがすでに存在する場合(つまり、前回の実行後)に構成の変更は機能しますが、すべてを一緒に実行すると、オーバーレイと新しい戦争への再パッケージ化が同時に発生します。 config-processorプラグインを途中で動作させる方法を見つけます。基本的に、デフォルトの順序は「config-processor」(オーバーレイがまだ行われていないため失敗します)、次に「war」(すべて1つのユニットとして)になります。オーバーレイの後、戦争が完全にパッケージ化される前に、config-processorを実行させることはできません。

インターネット上の複数の人々が、過去数年間、「オーバーレイの解凍」と「warファイルの再パック」の手順の間にプラグインを挿入する方法があるかどうかを尋ねてきましたが、どちらの方法でもこれに明確に答えた人はいないようです。何か案は?

4

2 に答える 2

6

戦争のオーバーレイと戦争のパッケージングは​​すべて単一の目標の一部として行われているように見えるので、その真ん中に入る方法はないと思います。web.xml回避策として、初期のフェーズで抽出して処理することができます。maven-dependency-pluginをプロジェクトBで使用してweb.xml、プロジェクトAから作業ディレクトリに抽出し、maven-config-processor-pluginを実行しweb.xmlて結果を別の場所に配置し、maven-war-pluginに処理済みのものを含めるように指示できます。web.xmlオーバーレイの前。プロジェクトBのPOM:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <!-- Extract web.xml from Project A -->
            <execution>
                <id>unpack-webxml</id>
                <phase>generate-resources</phase>
                <goals>
                    <goal>unpack</goal>
                </goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>your.group</groupId>
                            <artifactId>project.a</artifactId>
                            <version>...</version>
                            <type>war</type>
                            <overWrite>true</overWrite>
                            <outputDirectory>${project.build.directory}/myconfig/work</outputDirectory>
                            <includes>WEB-INF/web.xml</includes>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>com.google.code.maven-config-processor-plugin</groupId>
        <artifactId>maven-config-processor-plugin</artifactId>
        <version>2.0</version>
        <executions>
            <!-- Process extracted web.xml and place in temp build directory -->
            <execution>
                <id>process-webxml</id>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/myconfig/build</outputDirectory>
                    <transformations>
                        <transformation>
                            <input>${project.build.directory}/myconfig/work/WEB-INF/web.xml</input>
                            <output>WEB-INF/web.xml</output>
                            <!-- your transformation config -->
                        </transformation>
                    </transformations>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
            <webResources>
                <!-- Instruct war plugin to include temp build directory in webapp -->
                <resource>
                    <directory>${project.build.directory}/myconfig/build</directory>
                    <includes>
                        <include>**</include>
                    </includes>
                </resource>
            </webResources>
            <overlays>
                <!-- Overlay customization if needed -->
            </overlays>
        </configuration>
    </plugin>
</plugins>

私の知る限り、warプラグインには、webResources最初に、次にsrc/main/webapp、、次にオーバーレイが含まれます。

私はmaven-config-processor-pluginに精通していないので、構成が正しくない場合はお詫び申し上げます。

于 2012-05-31T15:39:17.053 に答える
4

maven-dependency-pluginのアンパックゴールを使用してプロジェクトAをフェッチし、ローカルでweb.xmlを取得してから、それを変換し、maven-war-pluginが変換されたweb.xmlを指すようにすることができます。

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
              <execution>
                <id>unpack</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>unpack</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.test</groupId>
                      <artifactId>test-war1</artifactId>
                      <version>0.0.1-SNAPSHOT</version>
                      <type>war</type>
                    </artifactItem>           
                  </artifactItems>
                  <outputDirectory>${project.build.directory}/wars</outputDirectory>
                </configuration>
              </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>com.google.code.maven-config-processor-plugin</groupId>
            <artifactId>maven-config-processor-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <!-- 
                  configure to transform file
                  ${project.build.directory}/wars/WEB-INF/web.xml
                  into
                  ${project.build.directory}/transformed/web.xml
                 -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>process</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
              <warSourceDirectory>src/main/webapp</warSourceDirectory>
              <webXml>${project.build.directory}/transformed/web.xml</webXml>
            </configuration>
        </plugin>
    </plugins>
  </build>
于 2012-05-31T15:40:14.690 に答える