2010-10-01 10 views
6

Estoy usando yui compressor para comprimir los archivos js en mi aplicación web.yui compresor maven plugin no comprime los archivos js

He configurado el complemento como se indica en el sitio yui maven plugin yui compressor maven plugin.

Este es el plug-in conf 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> 

Y aquí es el registro en el momento compresa

 
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 = [[email protected]] [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 --

El problema es que los archivos se están agregados en un solo archivo, pero sin comprimir.

El enlace de arriba usa la versión 1.1 y la versión del complemento que estoy usando es 0.7.1. ¿Esto va a hacer cualquier diferencia?

alguien puede decir lo que está mal aquí.

PD: He ocultado algo de texto en el registro para seguir el cumplimiento en mi empresa. Por lo tanto, puede encontrar que no coincide en alguna parte.

+0

Tengo un problema similar. Los archivos "minificados" conservan todos sus saltos de línea. La concatenación funciona, sin embargo. Muy extraño ... – Benxamin

Respuesta

0

¿Puedes intentar definir la ejecución por separado para jslint y comprimir y ver si eso funciona?

<executions> 
    <execution> 
     <goals> 
      <goal>jslint</goal>   
     </goals> 
     <configuration> ... </configuration> 
    </execution> 
    <execution> 
     <goals> 
      <goal>compress</goal>   
     </goals> 
     <configuration> ... </configuration> 
    </execution> 
</executions> 
+0

Ejecutado como dos ejecuciones diferentes. Pero aún no hay suerte en la misma situación. – hanumant

+0

Se eliminó el objetivo jslint de pom y solo se ejecutó la compresión para ver si funciona. El resultado es no, la compresión no funciona solo agregando. – hanumant

0

El compresor YUI (incluido como una dependencia en este plugin Maven) utiliza un "parcheada" versión de Mozilla Rhino para:

  • interpretar javascript
  • comprimir nombres de las variables locales (la "parche")

Al sumar la dependencia a Rhino (in your previous question), creo que estos " parches "se sobrescriben, convirtiendo este complemento maven en algo inútil: los comportamientos de eliminación de nombres y de compresión de nombres se han ido.

¡Quita el rinoceronte de tu pom y vuelve a resolver tu primer problema!

+0

hmm, tengo el mismo problema sin definir explícitamente a Rhino – Jan

5

Por lo que he leído, no configura el lugar desde donde se debe comprobar o comprimir el archivo js (ya que no usa la configuración predeterminada). Usted solo configura la agregación.

Para una respuesta más rápida utilizaron el issue tracker of yuicompressor-maven-plugin

La solución (copiar/pegar desde project FAQ)

Porque:

  • configura <nosuffix>true</nosuffix>

  • su guión en menos de src/main/webapp y maven-war-plugin copian todos los archivos desde src/main/webapp hasta el destino (ess timestamp, ...) y hacer la guerra (en la misma ejecución).

Soluciones:

  • mover su guión dir hacia fuera de webapp

    <plugin> 
        <groupId>@[email protected]</groupId> 
        <artifactId>yuicompressor-maven-plugin</artifactId> 
        ... 
        <configuration> 
        <!-- default ${project.build.sourceDirectory}/../js == src/main/js --> 
        <sourceDirectory>src/main/javascript</sourceDirectory> 
    
  • o excluir "scripts" de la lista de archivos para copiar

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

Sé que esta publicación es muy antigua, pero me encontré con lo mismo y esto es lo que encontré. Espero que esto ayude a alguien más también.

Esto es complicado. Esto tiene que ver con la opción de configuración de nosuffix. Si elimina la opción de desorden, la minificación funciona como se espera.

Si realmente tiene que tener nosuffix, entonces necesita cambiar la fase de ejecución a "paquete".

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

cualquiera de las fases antes de preparar-recursos no funciona porque cuando la guerra se construye, que recoge los js de la ubicación de la fuente original y que sobrescribe el js minified (fase creado durante prepare-recursos) en el directorio de destino

La minificación funciona cuando elimina nosuffix porque durante la fase del paquete, los nombres de los archivos son diferentes, por lo que no hay sobrescritura de los archivos y verá los archivos js minificados y no miniados en su directorio de destino.

Al menos eso es lo que entiendo.

+1

En este caso, tiene el minified en el directorio de webapp pero no en el archivo .war generado (compruebe el contenido, el complemento war ejecutado anteriormente (copie + archive en un single pass). Debe excluir el archivo de la copia: consulte https://github.com/davidB/yuicompressor-maven-plugin/wiki/FAQ –

+1

tiene razón. De hecho, terminé solucionándolo agregando un en el plugin yuicompressor y luego agregar ese mismo directorio como un recurso en el experto en la guerra-plugin. ' cierto \t \t falsa \t \t $ {project.build.directory}/min ' – Inxsible

Cuestiones relacionadas