Maven发布项目到tomcat
本文介绍如何通过Maven将项目发布到tomcat服务器中,包含发布到本地机和远程服务器
本文环境
apache-tomcat-9.0.30
Apache Maven 3.8.2
java version "1.8.0_301"
一、发布到本机
如果tomcat服务器在本机,可通过如下方式发布
1、添加Tomcat用户
修改conf/tomcat-users.xml
文件,添加管理员信息,修改如下
<tomcat-users version="1.0" xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd">
<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user password="jdk" roles="admin-gui,manager-gui,manager-script" username="java"/>
</tomcat-users>
一个用户可以配置多个角色,远程部署需要的角色为manager-script
启动Tomcat服务,测试用户是否可登录Tomcat管理界面
2、修改settings
修改Maven的配置文件settings.xml
文件,在<servers>
部分添加服务器账号信息,此账号可用于登录Tomcat服务器,与Tomcat中的配置相匹配
<servers>
<server>
<id>tomcat9</id>
<username>java</username>
<password>jdk</password>
</server>
</servers>
3、在Maven工程中加入插件
修改pom.xml
文件,加入tomcat7-maven-plugin
插件配置
<build>
<finalName>pytest</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 此处server配置与settings中的server,id 相关 -->
<server>tomcat9</server>
<update>true</update>
</configuration>
</plugin>
</plugins>
</build>
在写这篇文档时,也有tomcat8-maven-plugin
以及tomcat9-maven-plugin
插件,只是这两款插件在使用命令时不能使用简写方式,完整的写法也没能调用成功,未继续尝试。
tomcat7-maven-plugin
是这款插件的名称,个人觉得不一定要和Tomcat版本一致,能实现部署的功能就好
4、执行发布
在Tomcat处理运行状态下,可使用如下Maven命令部署应用到服务器中
mvn tomcat7:deploy
如果修改了代码需要重新发布,可使用
mvn tomcat7:redeploy
二、发布到远程
1、允许Tomcat远程管理
修改文件webapps/manager/META-INF/context.xml
,默认限定为仅允许本机访问
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
改为
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="\d+\.\d+\.\d+\.\d+" />
如果需要限定远程某地址访问,可修改allow内容
2、配置远程路径
修改项目pom.xml
文件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://{远程IP}:8080/manager/text</url>
<server>tomcat9</server>
<update>true</update>
</configuration>
</plugin>
</plugins>
3、执行部署
在远程Tomcat启动状态执行命令
mvn tomcat7:redeploy
即可发布应用到远程服务器
三、附录
1、tomcat7插件的调用格式如下
mvn tomcat7:{goal}
goal取值可参考
-
deploy
部署war包到Tomcat中 -
deploy-only
不经过package阶段,直接将包部署到Tomcat中(传输现成的) -
exec-war
创建一个包含必要Apache Tomcat类库的自可执行jar包,这允许使
用类似jar -jar mywebapp.jar
直接运行APP而不需要Tomcat实例 -
exec-war-only
同上exec-war,但是不使用package阶段 -
help
展示所有的帮助信息 -
redeploy
重新部署war包到Tomcat(等同于deploy目标加上update=true参数) -
redeploy-only
重新部署war包到Tomcat但是不经过package阶段(等同于deploy目标加上update=true参数) -
run
将当前项目作为动态web程序(exploded),使用嵌入的Tomcat服务器运行 -
run-war
将当前项目作为打包后的war(war),使用嵌入的Tomcat服务器运行 -
run-war-only
同run-war,但是不使用package阶段 -
shutdown
关闭所有已经开始的嵌入式Tomcat服务器 -
standalone-war
创建嵌入Tomcat的可执行war,并且可以在别的地方部署 -
standalone-war-only
同standalone-war但是不使用package阶段 -
undeploy
从Tomcat服务器中,取消部署某一个项目
参考:http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/plugin-info.html
2、插件参数配置
其中无默认值的参数为可选参数
名称 | 描述 | 默认值 |
---|---|---|
charset | 在与Tomcat Manager通信是的URL编码字符集 | ISO-8859-1 |
mode | 部署的模式,值可为:war,context,both | war |
path | 应用程序运行的上下文路径,必须以'/'开始 | /${project.artifactId} |
update | 当部署已存在的应用时,是否自动undeploy该应用 | false |
url | Tomcat Manager实例使用的全路径 | http://localhost:8080/manager/text |
warFile | 部署warFile的路径 | ${project.build.directory}/${project.build.finalName}.war |
contextFile | Tomcat的context的XML路径,对于mode=war不适用,默认为${project.build.directory}/${project.build.finalName}/META-INF/context.xml | |
ignorePackaging | 如果设置为true,忽略类型不是war的项目 | |
username | 部署到Tomcat的username | |
password | 部署到Tomcat的password | |
server | 指定Maven的setting.xml中配置的server id用于Tomcat认证 | |
tag | 应用程序在Tomcat中使用的标签的名字 |
网友评论