6

Maven を使用して Web アプリケーション プロジェクトを構築しており、パッケージングは​​ "war" に設定されています。また、YUI コンプレッサー プラグインを使用して、webapp ディレクトリ内の JavaScript コードを圧縮します。YUI コンプレッサーを次のように設定しました。

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
        <phase>process-resources</phase>
        <goals>
            <goal>compress</goal>
        </goals>
        </execution>
    </executions>
    <configuration>
        <excludes>
        <exclude>**/ext-2.0/**/*.js</exclude>
        <exclude>**/lang/*.js</exclude>
        <exclude>**/javascripts/flot/*.js</exclude>
        <exclude>**/javascripts/jqplot/*.js</exclude>
        </excludes>
        <nosuffix>true</nosuffix>
        <force>true</force>
        <jswarn>false</jswarn>
    </configuration>
</plugin>

mvn process-resources を実行すると、src/main/webapp が target/webapp-1.0/ ディレクトリにコピーされ、javacripts が圧縮されます。ただし、mvn install を実行すると、すべての圧縮された JavaScript が上書きされます。明らかに、パッケージ化プロセスは、war ファイルを構築する前に main/webapp からコンテンツを 1 回コピーします。

どうすればこれを回避できますか?

4

4 に答える 4

11

お気づきの/src/main/webappとおり、パッケージ フェーズで war プラグインが実行されるまで、ディレクトリ (別名 warSourceDirectory) の内容はパッケージ化のためにプロジェクト ディレクトリにコピーされません。war プラグインが完了すると、アーカイブはすでに構築されています。これらのリソースを変更するには遅すぎます。圧縮したい .js ファイルが別のディレクトリ ( 以外/src/main/webapp) に移動されている場合は、次のようにすることができます。

テストするために${basedir}/src/play、いくつかのファイルを含むディレクトリを作成しました。resourceこの例ではプラグインを使用しました。その構成を必要な YUI コンプレッサー プラグイン構成に置き換えて、以下に示すようにプラグイン<webResource>構成に要素を追加するだけです。war プラグインwarの例で詳細を確認してください。私の戦争は、必要な場所に追加のファイルを追加することになりました。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-resources</id>
      <phase>process-resources</phase>
      <goals><goal>copy-resources</goal></goals>
      <configuration>
        <outputDirectory>${project.build.directory}/tmpPlay</outputDirectory>
        <resources>
          <resource>
             <directory>${project.basedir}/src/play</directory>
             <includes>
                <include>**/*</include>
             </includes>
          </resource>
        </resources>
       </configuration>
    </execution>
  </executions>
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <executions>
    <execution>
      <id>default-war</id>
      <configuration>
        <webResources>
          <resource>
            <directory>${project.build.directory}/tmpPlay</directory>
            <targetPath>WEB-INF/yourLocationHere</targetPath>
            <includes>
              <include>**/*</include>
            </includes>
          </resource>
        </webResources>
      </configuration>
    </execution>
  </executions>
</plugin>
于 2012-04-13T16:14:01.517 に答える
3

@ user944849 の回答が正解だと思います。正解の少なくとも 1 つです。これをアーカイブする別の方法は、変更された javascript ディレクトリを maven-war-plugin 構成から除外することです。

<plugin>
    <artifactId> maven-war-plugin </artifactId>
    <configuration>
        <warSourceExcludes>**/external/ dojo/**/*.js </warSourceExcludes>
    </configuration>
</plugin>

これにより、除外されたディレクトリからコピーしないように maven-war-plugin に指示されますが、変更された javascript ディレクトリが既に存在するため、war ファイルにはまだ javascript ディレクトリが含まれていますが、この場合は圧縮された javascript コードが変更されています。

于 2012-04-16T18:11:26.407 に答える
0

実行ディレクティブで、圧縮を適用してコピーするフェーズをインストールに設定すると、うまくいくでしょう。コードは次のようになります。

<executions>
    <execution>
        ....
        <phase>install</phase>
        ....
    </execution>
<executions>
于 2012-04-13T00:01:33.493 に答える