7

mvn package目標によって作成された WAR パッケージにどのファイルを作成するかを制御しようとしています。具体的には、各パッケージのデフォルト フォルダーからいくつかのファイルを除外したいsrc/main/resources(さまざまな環境でビルド/パッケージを実行しようとしています)。

maven-war-plugin を使用しようとしましたが、失敗しました。この構成を追加すると (テスト用):

<webResources>
    <resource>
        <directory>src/main/resources</directory>
        <targetPath>WEB-INF/classes</targetPath>
        <excludes>
            <exclude>*.xml</exclude>
        </excludes>
    </resource>
</webResources>

...myWEB-INF/classesには引き続き XML ファイルが含まれます。これは、webResourcesパラメーターがコピー プロセスを複製しているように見えるためです (上記の構成は実際には機能し、ファイルはコピーされませんが、代わりに他のプロセスでコピーされます)。

Maven-war-plugin ドキュメントには次のように記載されています。

すべての Maven 2 プロジェクトのデフォルトのリソース ディレクトリは src/main/resources で、最終的には WAR の target/classes および WEB-INF/classes になります。ディレクトリ構造はプロセスで保持されます。

WAR プラグインは、webResources パラメーターを使用して、デフォルトのリソース ディレクトリにないリソースを含めることもできます。

これは少し混乱します。それは次のことを意味しますか?

  • このwebResourcesパラメータは maven-war-plugin の機能で、フォルダ外からのみファイルを含めることができますか? src/main/resourcesもしそうなら、コピーされたファイルを内部からどのように変更できますsrc/main/resourcesか?
  • このパラメーターは、フォルダー外からwebResourcesファイルを含めることができる maven-war-plugin の機能ですか? もしそうなら、これを行うようにどのように構成できますか?src/main/resources
  • 他のオプション?
4

2 に答える 2

12

mvn package goal によって作成される WAR パッケージにどのファイルを作成するかを制御しようとしています。具体的には、各パッケージのデフォルトの src/main/resources フォルダーからいくつかのファイルを除外したい

デフォルトのリソース ディレクトリ ( ) のリソースは、フェーズ中にsrc/main/resourcesビルド出力ディレクトリ ( ) にコピーされます。次に、フェーズ中に、のコンテンツが取得され、WAR などの分散アーカイブにパッケージ化され、その場合に終了します。target/classesprocess-resourcespackagetarget/classesWEB-INF/classes

したがって、どのリソースが最終的に になるかを制御したい場合はWEB-INF/classes、最終的にどのリソースが になるかを制御する必要があります。つまり、フェーズにバインドされた目標、特にMaven リソース プラグインtarget/classesの目標の動作を何らかの方法で変更する必要があります。process-resourcesresources:resources

そのためには (これはおそらく直感的ではありません)、ファイルとディレクトリの包含と除外に示されているように、pom の要素内でexcludeor要素を宣言できます。デフォルトのリソース ディレクトリに適用:includeresources

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <excludes>
        <exclude>**/*.xml</exclude>
      </excludes>
    </resource>
  </resources>
</build>

また、さまざまな環境でカスタム除外ルールを使用したい場合は、これをプロファイルと組み合わせてください。例えば:

<project>
  ...
  <profiles>
    <profile>
      <id>env-uat</id>
      <activation>
        <property>
          <name>env</name>
          <value>uat</value>
        </property>
      </activation>
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <excludes>
              <exclude>**/*.xml</exclude>
            </excludes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
</project>

そして、このプロファイルを使用すると、xml ファイルは終わらずtarget/classes、その結果WEB-INF/classes、最終的な戦争にもなりません。

maven-war-plugin を使用しようとしましたが、失敗しました。この構成を (テスト用に) 追加すると (...) WEB-INF/classes には XML ファイルが含まれます

ここで行っているのは、追加のリソース ディレクトリを追加することです。これは、既に含まれている既定のリソース ディレクトリのようです。したがって、除外するものは何でも、ファイルはとにかくtarget/classes中にコピーされ、最終的に.process-resourcesWEB-INF/classes

つまり、webResourcesデフォルトのリソース ディレクトリに含まれていないリソースを追加する場合に使用します。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <webResources>
            <resource>
              <!-- this is relative to the pom.xml directory -->
              <directory>extra-resources</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

しかし、これはあなたがここで探しているものではないと思います。上記で提案したアプローチを使用することをお勧めします。

于 2010-08-25T05:29:15.407 に答える
0

適切な構成とプロセスの適切な説明については、パスカルの回答を参照してください。ここでこの質問に直接答えます。

  • webResources パラメータは maven-war-plugin の機能で、src/main/resources フォルダの外部からのみファイルを含めることができますか? もしそうなら、コピーしたファイルを src/main/resources 内からどのように変更できますか?
  • webResources パラメーターは maven-war-plugin の機能で、src/main/resources フォルダーの外部からもファイルを含めることができますか? もしそうなら、これを行うようにどのように構成できますか?

これは前者で、webResourcesパラメータ inは outside から追加のmaven-war-pluginリソースを含めることのみを許可します。それ自体の包含/除外を構成することはできませんsrc/main/resourcessrc/main/resources

于 2010-08-25T12:26:13.223 に答える