Overview
以下纪录了实现Maven自动部署的步骤。
修改本地Tomcat端口
为了保持本地环境跟服务器环境一致,方便部署,首先需要修改本地tomcat的默认端口号,将8080改为8888:修改tomcat目录中/conf/server.xml
中的Connector
的port
属性。
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
修改settings.xml
修改用户当前根目录下
~/.m2/settings.xml
文件,默认情况下,.m2
目录下并不在settings.xml
,需要手动把${MAVEN_HOME}/libexec/conf/settings.xml
复制到~/.m2/
下,比如在我的环境下,执行如下命令:
cp /usr/local/Cellar/maven/3.2.3/libexec/conf/settings.xml ~/.m2
有的maven版本位置为${MAVEN_HOME}/conf/settings.xml
。添加server信息
在<servers></servers>
标签对中,添加如下信息<server> <id>mytomcat6</id> <username>admin</username> <password>admin</password> </server>
修改项目pom.xml
在pom中添加plugin:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <server>mytomcat6</server> <update>true</update> <port>${tomcat.port}</port> <path>/${project.artifactId}</path> <uriEncoding>${project.build.sourceEncoding}</uriEncoding> <url>http://localhost:8888/manager</url> </configuration> </plugin>
修改tomcat下的tomcat-users.xml文件
在tomcat文件夹中找到/conf/tomcat-users.xml,比如我的文件地址为:
/Library/apache-tomcat-6.0.43/conf/tomcat-users.xml
。在tomcat-users.xml中
<users></users>
对中添加如下信息:<role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx"/>
自动部署到tomcat
使用
mvn clean tomcat:deploy
命令部署。注意,不是mvn clean deploy
命令,deploy命令包含了install命令,会先将项目构件安装到本地maven库中,然后安装到远程配置好的私有仓库上。需要先启动tomcat,否则会有如下报错信息:
[ERROR]Failed to execute goal org.apache.tomcat.maven: tomcat7-maven-plugin: 2.0- SNAPSHOT: deploy (default-cli) on project helloworld: Cannot invoke Tomcat manager: Connection refused: connect -> [Help 1]
还差一点
此时部署,会报以下错误:
FAIL - Application already exists at path
原因:
由于tomcat的目录下:
/Library/apache-tomcat-6.0.43/conf/server.xml
有了重复配置的上下面:<Context docBase="jeesite" path="/jeesite_lian" reloadable="true" source="org.eclipse.jst.jee.server:jeesite"/> <Context docBase="jeesite_lian" path="/jeesite_lian" reloadable="true" source="org.eclipse.jst.jee.server:jeesite_lian"/>
path属性配置重复,由于之前有一个相同的本地项目,这次运行的项目是从SVN下载到本地的,但是拥有一样的path属性,因此报错。注释掉这两个Context
就可以了。
支持热部署
需要在pom
的tomcat6
插件的configuration
配置项中添加一个属性, <update>true</update>
,完整的插件如下
<!-- tomcat6插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<configuration>
<server>mytomcat6</server>
<update>true</update>
<port>${webserver.port}</port>
<path>/${project.artifactId}</path>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
<url>http://localhost:8080/manager</url>
</configuration>
</plugin>
使用Hudson构建mvn clean tomcat:deploy
并部署到远程服务器Tomcat
报错:JVM虚拟机内存不足,无法分配内存。
解决方案:
在Hudson设置界面,build选项栏下点击advance按钮
在JVM Options选项中增加
-Xmx512m
增加JVM虚拟机的内存大小。
小插曲
在修改了JVM内存之后,发现依然报错。使用htop
命令查看发现由于阿里云服务器内存太小(1G),导致实际内存被耗尽,Hudson使用的JVM内存无法向上调整。升级配置之后,问题解决。