8

(src/main/webapp)私はJava Webアプリを持っています.warにコピーしたくない標準のwebappソースディレクトリ内にいくつかのフォルダーがあります(explodedまたはpackaged)。

これらのファイルをコピーしたくない理由の 1 つは、爆発した war 内で .js および .css ファイルに対して YUI JS & CSS ミニマイザー & コンプレッサーを実行するためです。除外したいファイルは、圧縮フェーズ中にエラーを生成します。戦争に加担させたくないもう 1 つの理由は、webapp 内に存在する単一ページの JS アプリのテストをサポートしていることです (それらはnode/に依存するクライアント側の JS テスト スクリプトですangular.js)。

以下は、 の関連セクションですPOM.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <id>parent-resources</id>
      <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <overlays>
        </overlays>
        <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
      </configuration>
      <phase>generate-sources</phase>
      <goals>
        <goal>exploded</goal>
      </goals>
    </execution>
  </executions>
</plugin>

warSourceExcludes特定のパスを除外するために使用しようとしましたが、失敗しましたが、役に立ちませんでした。私の使用例を以下に示します。ここで、client/は直下のフォルダーsrc/main/webappです。

<configuration>
  ...
  <warSourceExcludes>
    <excludes>
      <exclude>
        client/
      </exclude>
    </excludes>
  </warSourceExcludes>
  ...
</configuration>

Web アプリのソース ディレクトリ内の特定のパスや個々のファイルを、爆発的な戦争に含まれないようにする正しい方法は何ですか?

アップデート

@maba からの提案に続いて、次のように構成を更新しました。

<configuration>
  <failOnMissingWebXml>false</failOnMissingWebXml>
  <overlays>
  </overlays>                                 
  <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
  <warSourceExcludes>client/</warSourceExcludes>
</configuration>

フォルダ はclient/まだコピーされています。何か案は?

4

4 に答える 4

9

@alexksandr と @maba の回答に感謝します。これは正しいですが、私の問題を完全には解決しませんでした。

解決策は、セクション内に配置されたときに構成セクションが選択されていないことです-なぜそうなのか正確にはわかりませんがexecution.

元の pom.xml を取得し、それを機能させるためにリファクタリングすると、次のようになります。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <overlays>
    </overlays>
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
    <warSourceExcludes>client/</warSourceExcludes>
  </configuration>
  <executions>
    <execution>
      <id>parent-resources</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exploded</goal>
      </goals>
    </execution>
  </executions>
</plugin>

重要な詳細は、構成がセクション内ではなくプラグインの最上位にある必要があるようです-ただし、最初に使用しようとしたときはexecution明らかに目標から外れていました(更新セクションの前の元の質問を参照)。xmlwarSourceExcludes

于 2012-11-05T16:37:14.060 に答える
3

機能する <warSourceExcludes> の構成は見つかりませんでしたが、 <packagingExcludes> は機能しました:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <packagingExcludes>excludeMe/**</packagingExcludes>
    </configuration>
  </plugin>
于 2014-10-30T14:03:14.860 に答える
1

あなたwarSourceExcludesは間違っています。maven-war-pluginについての発言は次のwarSourceExludesとおりです。

warSourceDirectory のコンテンツをコピーするときに除外するトークンのコンマ区切りリスト。

したがって、あなたの場合、これはあなたの設定がどのように見えるべきかです:

<configuration>
  ...
  <warSourceExcludes>client/</warSourceExcludes>
  ...
</configuration>

これは、さらに除外を追加する場合は、コンマで区切って追加することも意味します。

<configuration>
  ...
  <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes>
  ...
</configuration>
于 2012-11-05T10:51:01.173 に答える
1

フォルダからすべてのファイルを除外するには、そのようなワイルドカードを使用しますclient/**

<configuration>
 <failOnMissingWebXml>false</failOnMissingWebXml>
 <overlays>
 </overlays>                                 
 <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
 <warSourceExcludes>client/**</warSourceExcludes>
</configuration>
于 2012-11-05T12:09:38.017 に答える