maven自动部署到TOMCAT

配置tomcat服务器

# %CATALINA%/conf/tomcat-users.xml
# 注意少配置一个role,都可能引起 Connection reset by peer: socket write error
# 不过 stackoverflow 上有人推荐不使用 gui
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx"/>
 

配置Maven

	# %MVN_HOME%/conf/settings.xml
 <server>
  <id>LOCAL</id>
  <username>admin</username>
  <password>admin</password>
 </server>

配置 pom.xml

	# 打包, war 去掉版本号
 <finalName>${project.artifactId}</finalName>

 # 配置 Tomcat 插件
 <plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration> 
   <url>http://localhost/manager/text</url>
   <uriEncoding>${project.build.sourceEncoding}</uriEncoding>
   <!--   Maven 中配置的 server.id 对应
   <server>LOCAL</server>
   <!-- 解决 Connection reset by peer: socket write error -->
   <update>true</update>
  </configuration>
 </plugin>

运行 mvn 命令

mvn clean tomcat7:redeploy -Dmaven.test.skip=true
# 注意 tomcat7 不是 tomcat

有时为了防止WEB-INF/lib 下的文件被锁,无法删除:

在context.xml的context元素上设置antiResourceLocking=true

浅析Tomcat防止文件被锁的方式

更新:如果线上同时部署多台tomcat:

在 pom.xml 中配置 <profiles> (相当于参数配置):

<profile>
	<id>online</id>
	<properties>
		<deploy.server>ONLINE</deploy.server>
		<deploy.url>http://IP/manager/text</deploy.url>
	</properties>
</profile>

修改 tomcat.plugin :

...
<url>${deploy.url}</url>
<server>${deploy.server}</server>
...

并执行命令:

# -P 用于指定所使用的 profile
mvn tomcat7:redeploy -Dmaven.test.skip=true -Ponline

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注