m2eclipse是Eclipse的Maven插件,界面上可设置修改资源文件或Update Project Configuration后,触发Maven Lifecycle,相当于为扩展工程特定的需求提供了可能。比如:修改源码或配置文件后,将编译结果复制到应用服务器的部署目录下,都可以用自动化方式来实现。
(1)Windows -> Preferences -> Maven,设置Update Project Configuratoin时触发的Maven Lifecycle
(2)Maven工程右键 -> Properties -> Maven -> Lifecycle Mapping,设置修改Maven工程资源文件时触发的Maven Lifecycle
m2eclipse插件上,默认绑定的Maven生命周期是process-resources。结合m2eclipse触发pom.xml中绑定的Maven生命周期来实现特殊的需求,如下:
当process-resource阶段时,将Maven工程类路径下的类复制到应用服务器的部署目录下。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>dev-deploy</id> <phase>process-resources</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <copy todir="${deploy.home}/WEB-INF/classes" overwrite="true" failonerror="false"> <fileset dir="${project.basedir}/target/classes" /> </copy> </target> </configuration> </execution> </executions> </plugin> </plugins> </build>
上面的原理很简单,但实现时发现当修改源码保存后,并未触发pom.xml里绑定到process-resoures生命周期的maven-antrun-plugin插件复制文件。
但执行mvn package或右键 -> Maven -> Update Project Configurate时,都可以触发maven-antrun-plugin插件复制文件。只是在Eclipse上修改源码后,并不能触发复制文件。后来发现修改src/main/resources下的资源文件,是可以触发复制文件的。
主要问题出在,Eclipse下的源码m2eclipse不认为是资源文件,所以修改了也不会触发process-resources复制文件。但可以让m2eclipse将源码当作是资源文件来解决,方法就是在pom.xml中将src/main/java声明为资源文件,如下:
<build> <resources> <resource> <directory>src/main/java</directory> <filtering>false</filtering> <excludes> <exclude>**</exclude> </excludes> </resource> <resources> </build>做完以上resource声明,就可以实现Eclipsed中修改完源码后m2eclipse触发自动复制文件了,这是个小技巧,但不知道时真让人抓狂