views:

68

answers:

3

Hi, I am using yui compressor to compress the js files in my web app.

I have configured the plugin as indicated on yui maven plugin site yui compressor maven plugin.

This is the pom plugin conf

   <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>

And here is the log at compress time

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 --

The problem is the files are getting aggregated into one file but without compressing.

The link above uses version 1.1 and the plugin version I am using is 0.7.1. Is this going to make any diff.

Can someone tell what is wrong here.

PS: I have obfuscated some text in log to follow the compliance in my firm. So you may find it mismatching somewhere.

A: 

Can you try defining separate execution for jslint and compress and see if that works?

<executions>
    <execution>
        <goals>
            <goal>jslint</goal>         
        </goals>
        <configuration> ... </configuration>
    </execution>
    <execution>
        <goals>
            <goal>compress</goal>         
        </goals>
        <configuration> ... </configuration>
    </execution>
</executions>
Raghuram
Executed as two different executions. But no luck still the same situation.
hanumant
Removed jslint goal from pom and only executed compress to see if it works. Result is no, the compression is not working just aggregating.
hanumant
A: 

The YUI compressor (included as a dependency in this maven plugin) uses a "patched" version of Mozilla Rhino for:

  • interpreting javascript
  • compressing local variables names (the "patch")

By adding yourself the dependency to Rhino (in your previous question), I think these "patches" are overwritten, turning this maven plugin into something useless: the name-compressing, spaces-deleting behaviours are gone.

So remove rhino from your pom, and go back to solving your first problem!

Brian Clozel