web-dev-qa-db-ja.com

yuicompressormavenプラグインとmaven-war-plugin

私はこのプラグインを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(私が想定している)によって上書きされます。戦争ファイルを作成します。私は本当にファイル名を同じままにする必要があります...同じファイル名を使用し、縮小されたバージョンを最終戦争に持ち込むために何を変更する必要があるかについて誰かが知っていますか?

17
Dave Maple

OK。私はついにこれを理解しました。 yuicompressorプラグインで<webappDirectory>を定義する必要があります。これは、maven-war-pluginで<resource>として参照できます。以下の例では、<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>
26
Dave Maple

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

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warSourceExcludes>**/*.css,**/*.js</warSourceExcludes>
    </configuration>
</plugin>
8
Thrawn

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

まず、「ライフサイクルでカバーされていないプラグインの実行」について不平を言う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>

それから私が置いた戦争pomに:

<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ファイルが生成されます。

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

3
TooSerious

これは私の構成であり、MavenWebプロジェクトでは正常に機能します。

    <!-- 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>
2
vivia

pom.xmlの変更なし

mvn net.alchim31.maven:yuicompressor-maven-plugin:compress

すべてのjsおよびcssファイルを強制的に圧縮し、警告が表示された場合に失敗する

mvn net.alchim31.maven:yuicompressor-maven-plugin:compress \
-Dmaven.yuicompressor.force=true \
-Dmaven.yuicompressor.failOnWarning=true \

その他のオプション: http://davidb.github.io/yuicompressor-maven-plugin/usage_compress.html

0
Pkprabu

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>
0
Yu Jiaao

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

まず、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>
0
lmiguelmh