17

このプラグインを maven-war-plugin とうまく連携させるのに数時間苦労しており、助けを求める時が来たと思いました。次のように定義されたプラグインがあります。

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
            <id>compressyui</id>
            <phase>process-resources</phase>
            <goals>
                <goal>compress</goal>
            </goals>
            <configuration>
                <nosuffix>true</nosuffix>
                <warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
                <jswarn>false</jswarn>
            </configuration>
        </execution>
    </executions>
</plugin>

nosuffix=true を削除すると、圧縮/縮小された -min.js ファイルが期待どおりに戦争に入るのを見ることができますが、このフラグをオンにすると、maven-war-plugin によって上書きされます (私は推測しています)。 war ファイルをビルドします。私は本当にファイル名を同じままにする必要があります...同じファイル名を使用し、縮小されたバージョンを最終的な戦争に入れるために何を変更する必要があるかを知っている人はいますか?

4

7 に答える 7

26

わかった。私はついにこれを理解しました。<webappDirectory>yuicompressorプラグインでを定義する必要があります。これ<resource>は、maven-war-pluginでとして参照できます。以下の例では、私は使用しています<directory>${project.build.directory}/min</directory>

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
            <id>compressyui</id>
            <phase>process-resources</phase>
            <goals>
                <goal>compress</goal>
            </goals>
            <configuration>
                <nosuffix>true</nosuffix>
                <warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
                <webappDirectory>${project.build.directory}/min</webappDirectory>
                <jswarn>false</jswarn>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <executions>
        <execution>
            <id>default-war</id>
            <phase>package</phase>
            <goals>
                <goal>war</goal>
            </goals>
            <configuration>
                <warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
                <encoding>UTF-8</encoding>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
        <encoding>UTF-8</encoding>
        <webResources>
            <resource>
                <directory>${project.build.directory}/min</directory>
            </resource>
        </webResources>
    </configuration>
</plugin>
于 2012-07-15T19:40:50.237 に答える
8

WAR プラグインで「warSourceExcludes」を構成するだけです。

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warSourceExcludes>**/*.css,**/*.js</warSourceExcludes>
    </configuration>
</plugin>
于 2014-03-26T04:42:24.200 に答える
4

私のために働いた設定を追加したいと思います:

まず、「ライフサイクルでカバーされていないプラグインの実行」について不平を言うm2eを修正するために、この投稿から取得した親pomに次を追加しました。

  <pluginManagement>
    <plugins>
        <!--This plugin's configuration is used to store Eclipse 
            m2e settings only. It has no influence on the Maven build itself. -->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <pluginExecution>
                            <pluginExecutionFilter>
                                <groupId>net.alchim31.maven</groupId>                               
                                <artifactId>yuicompressor-maven-plugin</artifactId>
                                <versionRange>[1.0.0,)</versionRange>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <execute />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

それから私が入れた戦争ポンで:

<build>
    <plugins>
        <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>yuicompressor-maven-plugin</artifactId>
        <version>1.4.0</version>
        <executions>
        <execution>
            <goals>
              <goal>compress</goal>
            </goals>
            <configuration>
               <linebreakpos>300</linebreakpos>
               <excludes>
                 <exclude>**/*-min.js</exclude>
                 <exclude>**/*.min.js</exclude>
                 <exclude>**/*-min.css</exclude>
                 <exclude>**/*.min.css</exclude>
               </excludes>              
               <nosuffix>true</nosuffix>
            </configuration>
        </execution>
        </executions>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <warSourceExcludes>**/*.css,**/*.js</warSourceExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

これにより、プロジェクトのビルド ターゲット ディレクトリに縮小された css および js ファイルが生成されますが、元のファイルは除外されます。

これが誰かの時間を節約することを願っています。

于 2014-07-03T15:27:53.163 に答える
2

これは私の構成であり、私のMaven Webプロジェクトで正常に動作します:

    <!-- js/css compress -->
<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
        <excludes>
            <exclude>**/*-min.js</exclude>
            <exclude>**/*.min.js</exclude>
            <exclude>**/*-min.css</exclude>
            <exclude>**/*.min.css</exclude>
        </excludes>
        <jswarn>false</jswarn>
        <nosuffix>true</nosuffix>
    </configuration>
    <executions>
        <execution>
            <id>compress_js_css</id>
            <phase>process-resources</phase>
            <goals>
                <goal>compress</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<!-- war -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <webResources>
            <resource>
                <directory>${project.build.directory}/${project.build.finalName}/resources</directory>
                <targetPath>/resources</targetPath>
                <filtering>false</filtering>
            </resource>
        </webResources>
        <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
    </configuration>
</plugin>
于 2012-12-26T07:51:39.350 に答える
0

私が使用するアプローチは少し異なります。

mvn process-resources まず、コンパイル/パッケージ化の前に実行するように IDE を構成しました。このようにして、戦争が組み立てられる前にファイルが作成されます。

元のソース ファイルを置き換えずに同じディレクトリにファイルを作成できるように設定することは非常に重要です。<nosuffix>false</nosuffix><outputDirectory>${basedir}/src/main/resources/</outputDirectory>

 <plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.3.2</version>
    <configuration>
        <preProcessAggregates>false</preProcessAggregates>
        <excludes>
            <exclude>**/*-min.js</exclude>
            <exclude>**/*.min.js</exclude>
            <exclude>**/*-min.css</exclude>
            <exclude>**/*.min.css</exclude>
        </excludes>
        <jswarn>false</jswarn>
        <nosuffix>false</nosuffix> <!-- VERY IMPORTANT WILL REPLACE YOUR FILES IF YOU SET nosuffix TO TRUE OR DONT SET IT AT ALL -->
        <outputDirectory>${basedir}/src/main/resources/</outputDirectory> <!-- by default the plugin will copy the minimized version to target directory -->
        <failOnWarning>false</failOnWarning>
    </configuration>

    <executions>
        <execution>
            <id>compress_js_css</id>
                <phase>process-resources</phase>
            <goals>
                <goal>compress</goal>
            </goals>
        </execution>
    </executions>
</plugin>
于 2016-04-12T16:53:31.200 に答える
0

Jakob Kruse が言うように、*.js を処理する必要がありますが、*.min.js を処理する必要はありません。したがって、私の構成は以下のとおりです。%regex[] の使用に注意してください。

			<plugin>
			    <groupId>net.alchim31.maven</groupId>
			    <artifactId>yuicompressor-maven-plugin</artifactId>
			    <version>1.4.0</version>
			    <executions>
			        <execution>
			            <id>compressyui</id>
			            <phase>process-resources</phase>
			            <goals>
			                <goal>compress</goal>
			            </goals>
			            <configuration>
			                <nosuffix>true</nosuffix>
			                <warSourceDirectory>${basedir}/WebContent</warSourceDirectory>
			                <webappDirectory>${project.build.directory}/min</webappDirectory>
			                <jswarn>false</jswarn>		
				        <excludes>
				            <exclude>**/*-min.js</exclude>
				            <exclude>**/*.min.js</exclude>
				            <exclude>**/*-min.css</exclude>
				            <exclude>**/*.min.css</exclude>

				            <exclude>**/jquery.window.js</exclude>
				            ......
				            <exclude>**/compile.js</exclude>
				        </excludes>
			            </configuration>
			        </execution>
			    </executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>					
					<packagingExcludes>servlet-api*.jar,target/test-classes/*</packagingExcludes>
					<warSourceExcludes>test/**,%regex[.*(!min).js],%regex[.*(!min).css]</warSourceExcludes>
				
					<webResources>
 					            <resource>
					                <directory>${project.build.directory}/min</directory>
					            </resource>
					</webResources>
				
				</configuration>
			</plugin>

于 2016-04-22T02:30:44.790 に答える