1.事先准备
m2eclipse插件中其实内嵌了Maven,但个人更偏向于用独立的Maven(可以自由选择版本啦,偶尔可以在命令行中跑Maven命令啦)。
下载Apache Maven:http://maven.apache.org/,关于环境变量的设置,可以参照如下方法:
1.创建M2_HOME,值设为Maven的安装路径。如:%MY_WORKSPACE%\apache-maven-3.0.5
2.在Path中添加%M2_HOME%\bin; 在命令行中输入:mvn -version查看设置是否成功
另外,本地库文件夹的路径(Win7为例)默认为当前用户文件夹下的.m2文件夹,可以在settings.xml文件中通过<localRepository>设置更合适的路径。
<localRepository>我的路径</localRepository>
2.安装m2eclipse插件
安装m2eclipse插件非常简单,直接通过Help -》 Install New Software...来安装:
路径:http://download.eclipse.org/technology/m2e/releases (插件官网:http://eclipse.org/m2e/)
安装完以后,在eclipse的Window -》 Preferences下就能看到Maven的选项,选中Maven -》 Installations,点击【add...】按钮添加Maven的安装路径。
3.Tomcat的Maven插件安装及热部署
eclipse中tomcat服务器的设置再此就不做赘述,Java EE版可直接通过Preferences -》Server设置,standard版的需要安装tomcat插件(http://www.eclipsetotale.com/tomcatPlugin.html)。
接下来,以tomcat7为例讲述如何安装tomcat的maven插件(怎么建maven工程也就不说啦。。。)
提供两种方法,分别是利用插件内嵌tomcat和利用独立的tomcat的方法。
方法一:插件内嵌tomcat中的热部署
tomcat的maven插件其实已经内嵌了tomcat服务器,可以直接利用,修改maven工程下的pom.xml文件添加如下语句:
<project ......>
......
<!--设定tomcat7 maven插件的版本-->
<properties>
<tomcat7-maven-plugin-version>2.1</tomcat7-maven-plugin-version>
</properties>
......
<build>
......
<!--添加tomcat7 maven插件-->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat7-maven-plugin-version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
之后,用debug模式发布该工程:pom.xml右键 -》 Debug as -》Maven Build... ,
在【Goals】中输入:tomcat7:run
运行之后就会将工程发布到指定的tomcat7中(第一次运行会下载tomcat7的maven插件)。
尝试修改一下jsp等的内容,再次刷新页面后可以发现修改内容反映到了页面中。
这种方法非常简便,甚至不用在eclipse和maven中配置tomcat,但如果要对服务器做一些配置,内嵌的服务器可能并不是很方便,所以下面就来说说如何在独立的tomcat上进行热部署。
方法二:独立tomcat中的热部署(2013-8-11 更新)
在独立的tomcat中部署仍需要tomcat的maven插件,所以在【方法一】的基础上继续配置,过程可能略有曲折。
1.在maven的settings.xml中对tomcat以及管理员的登录账户密码做一定的设置:
<server>
<id>tomcat</id>
<username>username</username>
<password>password</password>
</server>
2.在pom.xml中tomcat插件配置的中添加上服务器的信息:
<project ......>
......
<build>
......
<plugins>
<plugin>
......
<configuration>
<!--settings.xml中server的id相同-->
<server>tomcat</server>
</configuration>
</plugin>
......
</plugins>
</build>
</project>
至此,在eclipse中启动tomcat,运行命令:tomcat7:redeploy,已经可以将工程发布到tomcat服务器上了,只可惜并不是热部署,每次修改都要进行发布,非常麻烦。所以,继续~
3.通过m2eclipse建立的web工程tomcat并不认识,所以先要对工程作一定的转化,
选中工程右键 -》Properties -》Project Facts ,勾选Dynamic Web Module,
完成后该工程就转化成了一个tomcat认识的web工程。新生成的WebContent文件夹可以直接删除,并不需要。
然后,再次打开工程的Properties窗口,选择Deployment Assembly,作如下配置:
Source | Deploy Path |
/src/main/java | WEB-INF/classes |
/src/main/resources | WEB-INF/classess |
/src/main/webapp | / |
Maven Dependencies | WEB-INF/lib |
4.接下去麻烦的事情来了(这一段废话较多,实际配置看第5点),在tomcat上实现热部署,对于配置来说就是要在context中做将reloadable属性设为true,并对工程路径进行配置,类似以下的代码:
<Context reloadable="true" docBase="${MY_PROJECT}\src\main\webapp" />
context在tomcat中一共可以写在5个地方,
1.META-INF/context.xml
2.%CATALINA_HOME%\conf\Catalina\localhost\[appname].xml
3.%CATALINA_HOME%\conf\Catalina\localhost\context.xml.default
4.%CATALINA_HOME%\conf\context.xml
5.%CATALINA_HOME%\conf\server.xml
尝试下来热部署的设置只在2,5两处有效(也有可能有其他办法我没发现),其中不推荐设置在server.xml中,undeploy的命令不能去除server.xml中的配置从而会导致再部署的失败。
因此只有配置%CATALINA_HOME%\conf\Catalina\localhost\[appname].xml了,
但也有一个问题,tomcat的maven插件每次跑undeploy后会删除该文件,而deploly命令并不会重新部署该xml文件,所以得用其他办法将该文件部署上去。
5.想到一个办法,就是利用maven-antrun-plugin,利用ant命令将配有热部署信息的xml文件上传到服务器中,
pom文件的配置如下:
<project ......>
......
<build>
......
<properties>
......
<maven-antrun-plugin-version>1.7</maven-antrun-plugin-version>
</properties>
<plugins>
......
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>${maven-antrun-plugin-version}</version>
<executions>
<execution>
<!--在package阶段运行-->
<phase>package</phase>
<configuration>
<tasks>
<!--利用ant的copy命令复制文件-->
<copy todir=目标文件夹 file=源xml文件 />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
6.对于记载热部署信息的xml文件,可以放在任何位置,但文件名一定要和发布的工程名相同,具体内容可以参照以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context ...... reloadable="true" docBase="${MY_PROJECT}\src\main\webapp" />
7.最后就是运行maven命令了,考虑到每次发布前的clean操作,以及redeploy命令不能触发package阶段跑ant命令(这点比较怪)。最终的命令为:【clean tomcat7:undeploy tomcat7:deploy】。
OK,至此终于可以在独立的tomcat上实现热部署了~
=================2013-8-11 更新=============================
实际的项目中,往往打完的包在target目录下,将6中docBase的目录设置为target下的目录会比较好,
但有一个问题,就是资源文件以及jsp文件修改后不会同步到target目录下。
为了解决这个问题,可以利用eclipse的一个插件fileSync。
该插件可以实现某个文件夹下的文件修改后自动同步到另一个指定的文件夹下的功能(增加,删除也支持)。
使用方法比较简单,就不多说了。 下载地址:http://andrei.gmxhome.de/filesync/http://marketplace.eclipse.org/content/filesync
另外,找jar包等可以多去http://mvnrepository.com/,资源比较丰富,并且提供pom文件的配置说明。