Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [m2e-users] How to integrate yuicompressor-maven-plugin execution in m2e lifecycle deploying phase (Tackling the lifecycle mapping problem)

It's activated automatically by m2e.

2011/10/14 Gustavo Henrique Orair <gustavo.orair@xxxxxxxxxxxxxxxx>
Yes, you got it!

Just another question (i do not understand maven profiles too much),
in your proposed solution, you've used the m2e.version property to activate the m2e profile.
Is this property activated automatically when I have m2e installed in Eclipse or I have to configure something inside Eclipse to define this property?

Br,

Orair.


2011/10/14 Fred Bricon <fbricon@xxxxxxxxx>
If you use Eclipse to deploy your project to a maven repo, using the Maven > Build... menu, you should be able to disable the m2e profile by adding !m2e in the profile input text, that way the maven build launched within eclipse will use the exact same configuration as a plain CLI invocation.

(I hope I understood your use case)


2011/10/14 Gustavo Henrique Orair <gustavo.orair@xxxxxxxxxxxxxxxx>
Fred Bricon,
Thanks for your prompt response!

I think that in your proposed approach resides a problem. If we use these approach, we cannot deploy (maven-deploy) the package inside Eclipse anymore.
This is a problem for us because we do not use CI software (such as Hudson), so our developers deploy these artifacts manually to maven repository (and presently we allow them to use Eclipse to do that).
If they do that, they will not understand why the deployed application will not work when we package this WAR deployed inside an EAR project.

I don't think files inside ${project.build.directory}/m2e-wtp/web-resources would be packaged inside the generated .war file?
Am I right?

Regards,
Orair.


2011/10/14 Fred Bricon <fbricon@xxxxxxxxx>
Instead of having 2 execution-ids of the same plugin, I would use only one and define an yuiCompressorOutput property, having the default value of ${project.build.directory}/${project.build.finalName} and the value used within m2e would be ${project.build.directory}/m2e-wtp/web-resources/

That'd look like

...
[in yuicompressor-maven-plugin config]
<output>${yuiCompressorOutput}/resources/js/0_1_2/script-min.js</output>
...

...
<properties>
    <yuiCompressorOutput>${project.build.directory}/${project.build.finalName}</yuiCompressorOutput>
</properties>
...
<profiles>
    <profile>
       <id>m2e</id>
      <activation>
          <property>          
             <name>m2e.version</name>        
           </property>      
      </activation>
      <properties>
           <yuiCompressorOutput>${project.build.directory}/m2e-wtp/web-resources/
</yuiCompressorOutput>
      </properties>
    </profile>
</profiles>

Regards,

Fred Bricon

2011/10/14 Gustavo Henrique Orair <gustavo.orair@xxxxxxxxxxxxxxxx>
Recently,
we've decided to migrate to Eclipse Indigo and uses m2e 1.0.
But, we have problems trying to tackle the lifecycle mapping problem.
As I understood, we have to define in pom.xml lifecycle mapping metadata to instruct Eclipse which executions should be executed when sources are changed.

In our WAR project, we want to write many small _javascript_ source files and these files would be merged in an unique file (minified or not). For this task, we've planned to use yuicompressor-maven-plugin.
I didn't find too many docs instructing how to develop a connector for this plugin. Just found an example inside m2e-core sources defining a lyfecicle mapping metadata to instruct m2e to ignore the execution of this plugin.
However, we would want to use and reference the merged file while deploying the artifact using Eclipse WTP.

The solution (I found googling) looks like to be instruct the plugin to generate the merged _javascript_ file inside m2e-wtp/web-resources/ directory.
So, we have to define two executions for this plugin. One to generate the merged file inside target (to be packaged) by maven (yuicompressor-default execution id) another to generate the merged file inside m2e-wtp/web-resources/ directory(yuicompressor-
eclipse execution id).
The second step would be to create the lifecycle metadata to instruct the execution of the plugin that generates the merged file inside m2e-wtp/web-resources.
One problem in this approach is that for each source file changed, both yuicompressor-maven-plugin are executed since we didn't find a way to ignore just the yuicompressor-default execution.

Here I present my pom.xml relevant sections:
Metadata filecycle mapping:

        <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.2,)</versionRange>
                                        <id>yuicompressor-eclipse</id>
                                        <goals>
                                            <goal>compress</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute></execute>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>




Yui Compreessor maven Plugin configuration

        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <id>yuicompressor-default</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>compress</goal>
                        </goals>
                        <inherited>false</inherited>
                        <configuration>
                            <aggregations>
                                <aggregation>
                                    <!-- remove files after aggregation (default: false) <removeIncluded>true</removeIncluded> -->
                                    <!-- insert new line after each concatenation (default: false) -->
                                    <insertNewLine>true</insertNewLine>
                                    <output>${project.build.directory}/${project.build.finalName}/resources/js/0_1_2/script.js</output>
                                    <!-- base directory for non absolute includes, default to parent dir of output -->
                                    <inputDir>${basedir}/src/main/webapp/resources/js/0_1_2</inputDir>
                                    <!-- files to include, path relative to output's directory or absolute path -->
                                    <includes>
                                        <include>file1.js</include>
                                        <include>file2.js</include>
                                        <include>file3.js</include>
                                        <include>file4.js</include>
                                        <include>file5.js</include>
                                        <include>file6.js</include>
                                        <include>file7.js</include>
                                    </includes>
                                    <!-- files to exclude, path relative to output's directory <excludes> <exclude>**/*.pack.js</exclude> <exclude>**/compressed.css</exclude>
                                        </excludes> -->
                                </aggregation>
                                <aggregation>
                                    <!-- remove files after aggregation (default: false) <removeIncluded>true</removeIncluded> -->
                                    <!-- insert new line after each concatenation (default: false) -->
                                    <insertNewLine>true</insertNewLine>
                                    <output>${project.build.directory}/${project.build.finalName}/resources/js/0_1_2/script-min.js</output>
                                    <!-- base directory for non absolute includes, default to parent dir of output -->
                                    <inputDir>${project.build.directory}/${project.build.finalName}/resources/js/0_1_2</inputDir>
                                    <!-- files to include, path relative to output's directory or absolute path -->
                                    <includes>
                                        <include>file1-min.js</include>
                                        <include>file2-min.js</include>
                                        <include>file3-min.js</include>
                                        <include>file4-min.js</include>
                                        <include>file5-min.js</include>
                                        <include>file6-min.js</include>
                                        <include>file7-min.js</include>
                                    </includes>
                                    <!-- files to exclude, path relative to output's directory <excludes> <exclude>**/*.pack.js</exclude> <exclude>**/compressed.css</exclude>
                                        </excludes> -->
                                </aggregation>
                            </aggregations>
                        </configuration>
                    </execution>
                    <execution>
                        <id>yuicompressor-eclipse</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>compress</goal>
                        </goals>
                        <inherited>false</inherited>
                        <configuration>
                            <aggregations>
                                <aggregation>
                                    <!-- remove files after aggregation (default: false) <removeIncluded>true</removeIncluded> -->
                                    <!-- insert new line after each concatenation (default: false) -->
                                    <insertNewLine>true</insertNewLine>
                                    <output>${project.build.directory}/m2e-wtp/web-resources/resources/js/0_1_2/script.js</output>
           
                                    <!-- base directory for non absolute includes, default to parent dir of output -->
                                    <inputDir>${basedir}/src/main/webapp/resources/js/0_1_2</inputDir>
                                    <!-- files to include, path relative to output's directory or absolute path -->
                                    <includes>
                                        <include>file1-min.js</include>
                                        <include>file2-min.js</include>
                                        <include>file3-min.js</include>
                                        <include>file4-min.js</include>
                                        <include>file5-min.js</include>
                                        <include>file6-min.js</include>
                                        <include>file7-min.js</include>
                                    </includes>
                                    <!-- files to exclude, path relative to output's directory <excludes> <exclude>**/*.pack.js</exclude> <exclude>**/compressed.css</exclude>
                                        </excludes> -->
                                </aggregation>
                                <aggregation>
                                    <!-- remove files after aggregation (default: false) <removeIncluded>true</removeIncluded> -->
                                    <!-- insert new line after each concatenation (default: false) -->
                                    <insertNewLine>true</insertNewLine>
                                    <output>${project.build.directory}/m2e-wtp/web-resources/resources/js/0_1_2/script-min.js</output>
                                    <!-- base directory for non absolute includes, default to parent dir of output -->
                                    <inputDir>${project.build.directory}/${project.build.finalName}/resources/js/0_1_2</inputDir>
                                    <!-- files to include, path relative to output's directory or absolute path -->
                                    <includes>
                                        <include>file1-min.js</include>
                                        <include>file2-min.js</include>
                                        <include>file3-min.js</include>
                                        <include>file4-min.js</include>
                                        <include>file5-min.js</include>
                                        <include>file6-min.js</include>
                                        <include>file7-min.js</include>
                                    </includes>
                                    <!-- files to exclude, path relative to output's directory <excludes> <exclude>**/*.pack.js</exclude> <exclude>**/compressed.css</exclude>
                                        </excludes> -->
                                </aggregation>
                            </aggregations>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <!-- <disableOptimizations>false</disableOptimizations> -->
                   
                    <!-- <encoding></encoding> -->
                    <!-- <failOnWarning>true</failOnWarning> -->
                    <!-- Zip the files. Defaults to false -->
                    <!-- <gzip>true</gzip> -->
                    <!-- force the compression of every files, else if compressed file already exists and is younger than source file, nothing is done. -->
                    <!-- <force>true</force> -->
                    <!-- Unable _javascript_ warnings  -->
                    <jswarn>false</jswarn>
                </configuration>
            </plugin>
        </plugins>


Is there another better way to integrate merging and minifying _javascript_ or css files inside m2e lifecycle deploying phase?


Best regards,
Orair.

_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users




--
"Have you tried turning it off and on again" - The IT Crowd

_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users



_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users




--
"Have you tried turning it off and on again" - The IT Crowd

_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users



_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users




--
"Have you tried turning it off and on again" - The IT Crowd

Back to the top