plugin compiler maven plugins yui-compressor sonatype

compiler - yuicompressor maven plugin y maven-war-plugin



maven-resources-plugin (6)

He estado luchando para conseguir que este complemento funcione bien con el complemento de guerra de maven durante un par de horas y pensé que era hora de pedir ayuda. Tengo el plugin definido de la siguiente manera:

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

Si elimino nosuffix = true, puedo ver que los archivos comprimidos / minified -min.js entran en la guerra como se esperaba, pero con esta bandera en la que está siendo sobrescrito por el plugin de maven-war (supongo) cuando construye el archivo de guerra. Sin embargo, realmente necesito que los nombres de los archivos sigan siendo los mismos ... ¿Alguien tiene una idea de lo que necesito cambiar para usar los mismos nombres de archivos y aún así obtener las versiones minificadas en la guerra final?


Como dice Jakob Kruse, debe lidiar con el * .js, pero no con el * .min.js, por lo que mis configuraciones están a continuación, tenga en cuenta el uso de% 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>


DE ACUERDO. Finalmente me di cuenta de esto. <webappDirectory> definir un <webappDirectory> en el complemento de yuicompressor que luego puede ser referenciado como un <resource> en el complemento de maven-war. En el siguiente ejemplo, estoy usando <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>


El enfoque que utilizo es un poco diferente.

Primero, configuré mi IDE para ejecutar mvn process-resources antes de la compilación / empaquetado . De esta manera los archivos se crean antes de que se arme la guerra.

Es muy importante establecer <nosuffix>false</nosuffix> y <outputDirectory>${basedir}/src/main/resources/</outputDirectory> para que los archivos se puedan crear en el mismo directorio sin reemplazar los archivos de origen originales.

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


Esta es mi configuración, y funciona bien en mi proyecto web de Maven:

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


Me gustaría agregar la configuración que funcionó para mí:

Primero, para corregir el error de m2e quejándose de la ''Ejecución del complemento no cubierto por el ciclo de vida'', agregué lo siguiente en el pom principal tomado de esta publicación :

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

Luego en la guerra pom pongo:

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

Esto genera los archivos css y js minificados en el directorio de destino de compilación del proyecto, a la vez que se excluyen los archivos originales.

Espero que esto le ahorre tiempo a alguien.


Simplemente configure ''warSourceExcludes'' en el complemento WAR.

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