<plugin>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.7.2</version>
<executions>
<execution>
<id>default-minify</id>
<phase>generate-resources</phase>
<configuration>
<charset>UTF-8</charset>
<cssSourceDir>css</cssSourceDir>
<cssSourceFiles>
<cssSourceFile>x.css</cssSourceFile>
<cssSourceFile>y.css</cssSourceFile>
<cssSourceFile>z.css</cssSourceFile>
</cssSourceFiles>
<cssFinalFile>style.css</cssFinalFile>
<jsSourceDir>js</jsSourceDir>
<jsSourceFiles>
<jsSourceFile>x.js</jsSourceFile>
<jsSourceFile>y.js</jsSourceFile>
<jsSourceFile>z.js</jsSourceFile>
</jsSourceFiles>
<jsFinalFile>script.js</jsFinalFile>
<jsEngine>CLOSURE</jsEngine>
<webappTargetDir>${basedir}/src/main/webapp</webappTargetDir>
</configuration>
<goals>
<goal>minify</goal>
</goals>
</execution>
</executions>
</plugin>
This worked fine when I ran 'mvn clean install' from my command line.
But I am also using Eclipse (with the whole ecosystem of m2e / WTP / m2e-wtp) and Tomcat from within Eclipse. And I wanted to be able to publish the generated resources "script-min.js" and "style-min.css" to Tomcat using Eclipse.
Here is what I did in the end:
Did you notice the line in the plugin configuration.
<webappTargetDir>${basedir}/src/main/webapp</webappTargetDir>
By default the Minify Maven Plugin generates the resource into the 'target' folder. By setting this parameter I let the plugin generate the resources into the same folder as the source js and css files.
Now one simply has to run 'mvn generate-resources' either from the command line or from within Eclipse and then do a "Refresh" (F5) on the project and afterwards call 'Publish' on the Tomcat from within Eclipse. If Tomcat is already running it will even auto-publish the change.
This is it and this is what I do.
Note 1:
As an alternative to running 'mvn generate-resources' one can also call "Clean" on the project and let m2e rebuild it. There is just one additional thing if one want to go with this alternative: By default m2e does not execute the "Minify Maven Plugin" so you have to tell it to do so in your pom.xml:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<!-- We need to add this so that m2e (maven2eclipse) will execute the minify-maven-plugin's goal 'minify' when it builds the eclipse project -->
<pluginExecutionFilter>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<versionRange>[1.0.0,)</versionRange>
<goals>
<goal>minify</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
That's it.
Note 2: Within the 'm2e lifecyce mapping' configuration I also tried to set
<execute>
<runOnIncremental≶true</runOnIncremental>
</execute>
which would generate "script-min.js" and "style-min.css" each time one made a change to any of the source js or css files. This worked nicely when I manually called 'Publish' but I encountered a problem when Tomat was running and trying to auto-publish the changes:
When I changed one of the JS/CSS files Eclipse would get into an endless loop of automatically republishing and building the project.
As I do not very often change the JS/CSS files in this project I decided it was best to go with the manual steps of running 'mvn generate-resources' (from Eclipse), refreshing by hitting F5, and then publishing.
I have a very similar setup and ran into the same problem, i.e. endless loops when setting runOnIncremental to true. Using the maven plugin "YUI Compressor" I did not have this problem, but I didn't use aggregation. In addition, I'm not sure if it supports aggregation of css files. It does for js files.
ReplyDeletePerfect. Thank you!
ReplyDelete