6

YUI Compressor を使用して、Web アプリで JS ファイルを圧縮しています。

プラグインのサイトに示されているようにプラグインを構成しました。

これはPOMプラグインの設定です:

   <plugin>
    <groupId>net.sf.alchim</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>0.7.1</version>  
    <executions>
      <execution>
     <phase>compile</phase>
        <goals>
         <goal>jslint</goal>
          <goal>compress</goal>
        </goals>
      </execution>
    </executions>        
    <configuration>
    <failOnWarning>true</failOnWarning>
      <nosuffix>true</nosuffix>
      <force>true</force>
      <aggregations>
       <aggregation>
          <!-- remove files after aggregation (default: false) -->
          <removeIncluded>false</removeIncluded>
          <!-- insert new line after each concatenation (default: false) -->
          <insertNewLine>false</insertNewLine>
          <output>${project.basedir}/${webcontent.dir}/js/compressedAll.js</output>
          <!-- files to include, path relative to output's directory or absolute path-->
          <!--inputDir>base directory for non absolute includes, default to parent dir of output</inputDir-->
          <includes>                
            <include>**/autocomplete.js</include>
            <include>**/calendar.js</include>
            <include>**/dialogs.js</include>
            <include>**/download.js</include>
            <include>**/folding.js</include>
            <include>**/jquery-1.4.2.min.js</include>
            <include>**/jquery.bgiframe.min.js</include>
            <include>**/jquery.loadmask.js</include>
            <include>**/jquery.printelement-1.1.js</include>
            <include>**/jquery.tablesorter.mod.js</include>
            <include>**/jquery.tablesorter.pager.js</include>
            <include>**/jquery.dialogs.plugin.js</include>
            <include>**/jquery.ui.autocomplete.js</include>                
            <include>**/jquery.validate.js</include>  
            <include>**/jquery-ui-1.8.custom.min.js</include>
            <include>**/languageDropdown.js</include>
            <include>**/messages.js</include>
            <include>**/print.js</include>
            <include>**/tables.js</include>
            <include>**/tabs.js</include>
            <include>**/uwTooltip.js</include>
          </includes>
          <!-- files to exclude, path relative to output's directory-->

        </aggregation>
      </aggregations>
    </configuration>
    <dependencies>
         <dependency> 
 <groupId>rhino</groupId>  
  <artifactId>js</artifactId>       
  <scope>compile</scope>  
  <version>1.6R5</version> 
</dependency>  
<dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>2.0.7</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-project</artifactId>
        <version>2.0.7</version>
        <scope>provided</scope>
    </dependency><dependency>
        <groupId>net.sf.retrotranslator</groupId>
        <artifactId>retrotranslator-runtime</artifactId>
        <version>1.2.9</version>
        <scope>runtime</scope>
    </dependency>

    </dependencies>
  </plugin>

そして、圧縮時のログは次のとおりです。

These will use the artifact files already in the core ClassRealm instead, to allow them to be included in PluginDescriptor.getArtifacts().


[DEBUG] Configuring mojo 'net.sf.alchim:yuicompressor-maven-plugin:0.7.1:jslint' 
[DEBUG]   (f) failOnWarning = true
[DEBUG]   (f) jswarn = true
[DEBUG]   (f) outputDirectory = C:\test\target\classes
[DEBUG]   (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml
[DEBUG]   (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\src,
 PatternSet [includes: {}, excludes: {**/*.class, **/*.java, site/*}]}}]
[DEBUG]   (f) sourceDirectory = C:\test\src\..\js
[DEBUG]   (f) warSourceDirectory = C:\test\src\main\webapp
[DEBUG]   (f) webappDirectory = C:\test\target\test2-19-SNAPSHOT
[DEBUG] -- end configuration --
[INFO] [yuicompressor:jslint {execution: default}]
[INFO] nb warnings: 0, nb errors: 0
[DEBUG] Configuring mojo 'net.sf.alchim:yuicompressor-maven-plugin:0.7.1:compress' -->
[DEBUG]   (f) removeIncluded = false
[DEBUG]   (f) insertNewLine = false
[DEBUG]   (f) output = C:\test\WebContent\js\compressedAll.js
[DEBUG]   (f) includes = [**/autocomplete.js, **/calendar.js, **/dialogs.js, **/download.js, **/folding.js, **/jquery-1.4.2.min.js, **/jquery.bgifram
e.min.js, **/jquery.loadmask.js, **/jquery.printelement-1.1.js, **/jquery.tablesorter.mod.js, **/jquery.tablesorter.pager.js, **/jquery.dialogs.p
lugin.js, **/jquery.ui.autocomplete.js, **/jquery.validate.js, **/jquery-ui-1.8.custom.min.js, **/languageDropdown.js, **/messages.js, **/print.js, *
*/tables.js, **/tabs.js, **/uwTooltip.js]
[DEBUG]   (f) aggregations = [net.sf.alchim.mojo.yuicompressor.Aggregation@65646564]
[DEBUG]   (f) disableOptimizations = false
[DEBUG]   (f) encoding = Cp1252
[DEBUG]   (f) failOnWarning = true
[DEBUG]   (f) force = true
[DEBUG]   (f) gzip = false
[DEBUG]   (f) jswarn = true
[DEBUG]   (f) linebreakpos = 0
[DEBUG]   (f) nomunge = false
[DEBUG]   (f) nosuffix = true
[DEBUG]   (f) outputDirectory = C:\test\target\classes
[DEBUG]   (f) preserveAllSemiColons = false
[DEBUG]   (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml
[DEBUG]   (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\src,
 PatternSet [includes: {}, excludes: {**/*.class, **/*.java, site/*}]}}]
[DEBUG]   (f) sourceDirectory = C:\test\src\..\js
[DEBUG]   (f) statistics = true
[DEBUG]   (f) suffix = -min
[DEBUG]   (f) warSourceDirectory = C:\test\src\main\webapp
[DEBUG]   (f) webappDirectory = C:\test\target\test2-19-SNAPSHOT
[DEBUG] -- end configuration --
[INFO] [yuicompressor:compress {execution: default}]
[INFO] generate aggregation : C:\test\WebContent\js\compressedAll.js
[INFO] compressedAll.js (407505b)
[INFO] nb warnings: 0, nb errors: 0
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-resources-plugin:2.2:testResources' -->
[DEBUG]   (f) filters = []
[DEBUG]   (f) outputDirectory = C:\test\target\test-classes
[DEBUG]   (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml
[DEBUG]   (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\test
, PatternSet [includes: {}, excludes: {**/*.class, **/*.java}]}}]
[DEBUG] -- end configuration --

問題は、ファイルが 1 つのファイルに集約されているにもかかわらず、圧縮されていないことです。

上記のリンクはバージョン 1.1 を使用しており、私が使用しているプラ​​グインのバージョンは 0.7.1 です。これで何か違いはありますか?

誰かがここで何が悪いのか教えてもらえますか?

PS: 私の会社のコンプライアンス ルールに従うために、ログ内の一部のテキストを難読化しているため、いくつかの場所で不一致が見つかる場合があります。

4

4 に答える 4

5

私が読んだことから、jsファイルをチェックまたは圧縮する場所を構成しません(デフォルト構成を使用しないため)。アグリゲーションのみを構成します。

迅速な対応のために、yuicompressor-maven-plugin の問題トラッカーを使用しました

解決策 (プロジェクト FAQからコピー/貼り付け)

なぜなら :

  • あなたが設定した<nosuffix>true</nosuffix>

  • src/main/webapp および maven-war-plugin の下にあるスクリプトは、src/main/webapp からすべてのファイルをターゲットにコピーし (タイムスタンプに関係なく...)、war を作成します (同じ実行で)。

回避策:

  • スクリプトディレクトリをwebappから移動します

    <plugin>
      <groupId>@project.groupId@</groupId>
      <artifactId>yuicompressor-maven-plugin</artifactId>
      ...
      <configuration>
        <!-- default ${project.build.sourceDirectory}/../js == src/main/js -->
        <sourceDirectory>src/main/javascript</sourceDirectory>
    
  • または、コピーするファイルのリストから「スクリプト」を除外します

    <!-- adapted from https://github.com/davidB/yuicompressor-maven-plugin/blob/master/src/it/demo01/pom.xml -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <configuration>
        <warSourceExcludes>scripts/**</warSourceExcludes>
      </configuration>
    </plugin>
    
于 2011-05-01T09:48:52.023 に答える
2

この投稿が非常に古いことは知っていますが、同じことに出くわし、これが私が見つけたものです。うまくいけば、これは他の誰かにも役立つでしょう。

これはトリッキーです。これは nosuffix 設定オプションと関係があります。nosuffix オプションを削除すると、縮小は期待どおりに機能します。

本当に nosuffix が必要な場合は、実行フェーズを「パッケージ」に変更する必要があります。

    <executions>
      <execution>
        <phase>package</phase>
          <goals>
    ......
    .....

war がビルドされると、元のソースの場所から js が取得され、ターゲット ディレクトリ内の縮小された js (prepare-resources フェーズで作成された) が上書きされるため、prepare-resources の前のフェーズは機能しません。

パッケージ フェーズではファイル名が異なるため、nosuffix を削除すると縮小が機能します。そのため、ファイルが上書きされることはなく、縮小された js ファイルと縮小されていない js ファイルの両方がターゲット ディレクトリに表示されます。

少なくともそれは私の理解です。

于 2013-03-01T20:32:27.123 に答える
0

jslint と圧縮の個別の実行を定義してみて、それが機能するかどうかを確認できますか?

<executions>
    <execution>
        <goals>
            <goal>jslint</goal>         
        </goals>
        <configuration> ... </configuration>
    </execution>
    <execution>
        <goals>
            <goal>compress</goal>         
        </goals>
        <configuration> ... </configuration>
    </execution>
</executions>
于 2010-10-01T04:44:45.910 に答える
0

YUI コンプレッサー (この Maven プラグインに依存関係として含まれる) は、Mozilla Rhino の「パッチを適用した」バージョンを次の目的で使用します。

  • JavaScript の解釈
  • ローカル変数名の圧縮 (「パッチ」)

Rhino への依存関係を追加することで (前の質問で)、これらの「パッチ」が上書きされ、この Maven プラグインが役に立たなくなったと思います。名前の圧縮、スペースの削除の動作はなくなりました。

それでは、po から rhino を削除して、最初の問題の解決に戻りましょう!

于 2010-10-12T21:37:08.967 に答える