1.虽然现在Maven中央仓库中支持的tomcat插件只支持到tomcat7这个版本,但是可以利用这个插件对Web项目进行热部署,热部署到远程服务器的tomcat服务器上,远程服务器上的tomcat版本可以是更高的版本,比如说tomcat8、9、10或更高的版本中。
将Maven项目热部署到远程tomcat中
文章目录
- 将Maven项目热部署到远程tomcat中
-
- 1.为什么要写这篇文章?
- 2.一键热部署解决方案
- 3.一键热部署实现思路
- 4.Tomcat中的Root项目的配置和使用
- 5.在tomcat-user.xml中配置远程服务器tomcat的账户信息
- [6.修改 IP 访问权限](#6.修改 IP 访问权限)
- [7.登录ROOT项目,使用Manager App功能管理tomcat中的项目资源](#7.登录ROOT项目,使用Manager App功能管理tomcat中的项目资源)
- 8.maven远程上传war项目的配置和使用
- 9.tomcat虚拟目录配置
- 10.参考文档
- 11.视频教程
1.为什么要写这篇文章?
1.1web项目分模块开发
开发Web项目,用到了Maven对Web项目进行分模块开发,提高项目构建、发布、管理的灵活性。
1.2分模块开发解决项目管理的灵活性的主要表现
(1)Web项目的依赖管理变得更加灵活
web项目依赖jar包的管理不再乱麻一团,管理起来变得清晰明了了,升级jar包的版本也变得更灵活方便,直接根据Maven官方中央仓库的版本号修改升级或降级即可。
(2)对Web项目模块的管理变得更灵活,同时对程序员的管理也变得更灵活
分模块开发之后,项目增加一个模块,移除一个模块不再是麻烦事。从公司招聘新员工角度来说,招一个程序员进来,让其开发一个项目模块,如果这个程序员是水货,能力达不到,他所开发的模块虽然没弄成,但是因为公司Web项目采用了分模块开发,不会影响整个公司Web项目的大局,直接从整个项目模块中移除掉他所开发的模块即可。这都是Maven的聚合能力提供了这样一个好的支撑,立下了汗马功劳。可以说,对项目,对员工的管理都变得更具有灵活性,公司可以大胆的让新员工做尝试,对公司程序员的培养让其提升能力打下坚实基础。
(3)项目的多环境部署变得更加的灵活
a.使用Maven构建Web项目之后,让Web项目可以轻松的一键热部署到多个环境,如线上环境、开发环境、测试环境。
b.注意:无论你的Web项目运行所处环境是windows系统还是linux系统都可以一键搞定,关键还是热的,即对某一个项目模块修改升级之后,可以立即通过热部署,一键实现某个环境的升级部署。从这一点上来说,以后Web项目的bug修复,无论是线下、还是线上都将变得极其的容易。
(4)私服仓库的使用,使得Web项目的团队协作开发变得更加灵活
a.分模块开发后,由于团队成员每个人负责开发的模块不一样,当团队某个成员需要使用其他成员提供的模块支撑(依赖)时,可以通知其他团队成员将自己开发的模块,通过Maven快速的上传发布到公司的私服仓库,该成员直接从私服仓库同步获取新的功能支撑即可,提升了项目的集成效率、使得团队协作开发变理更加灵活方便。
b.私服仓库构建起了本地仓库到阿里云私服仓库和Maven中央仓库之间的桥梁
当Web项目需要第三方开发者提供的jar资源支持时,首先从本地仓库中去寻找是否存在这个资源,如果没有找到,则需要到公司的私服仓库里面去找,公司私服仓库没有就需要从阿里云镜像私服仓库(即Maven中央仓库的镜像)加载 ,如果阿里云镜像私服仓库中没有我们项目开发所需要的jar资源时,会到Maven的中央仓库里去找我们所需要的资源。
在这个过程当中,公司的私服仓库需要做几件事,一是要创建一个代理仓库,配置好阿里云的私服仓库组的地址。二是把这个代理仓库添加到public仓库组里面,让公司的开发者直接访问这个public仓库组,致其可以访问到阿里去的私服仓库组,三是在public仓库组里面也可加上Maven中央仓库组的配置(默认是加上了的,不用我们管)。
总之一句话,就是利用公司的私服仓库组搞定与阿里云镜像仓库组与Maven中央仓库的连接,开发团队的每个成员在本地仓库中直接访问公司的私服仓库组就可以拿到公司其他成员或第三方公司开发的资源了(jar包等)。
2.一键热部署解决方案
由我们自己将修改后的war包上传到linux中,变为由maven帮我们实现。
(1)当我们的项目发生资源变更时,我们会在本地使用Maven对项目资源进行重新打包.
(2)打包后,我们再次使用maven将项目新的war包上传到linux中的tomcat中。
3.一键热部署实现思路
(1)我们已经学过了web开发中的上传功能,那么我们是不是可以开发一个web项目,该web项目提供一个资源上传的功能,比如该项目的名字为A项目。
(2)然后我们将A项目部署到linux中的tomcat中,启动tomcat,然后我们在本地的浏览器中访问A项目。
(3)选择我们的war包,将上传请求发送给A项目,而A项目在接收到上传请求后,将war包存储到linux下的tomcat中的webapps目录下
(4)那么再细细的思考一下,那么能不能让maven去访问我们的项目A的上传功能,将项目的war包上传到linux下的tomcat中的webapps目录下呢?答案是可以的。
(5)说白了就是让我们的maven具备发送http请求的功能
(6)其实项目A是tomcat自带的一个web项目,不需要我们自己开发了。
4.Tomcat中的Root项目的配置和使用
(1)启动远程tomcat服务器
(2)访问tomcat服务器的首页(即广告页,相当于我们的项目A)
tomcat自带的ROOT项目,是tomcat自带的一个web项目。
我们可以通过浏览器访问,然后在浏览器中管理tomcat中的项目资源。
(3)点击tomcat首页的Manager App
a.当我们点击Manager App时会先提示我们进行登录,在登录界面中输入帐号与密码即可进入到项目资源管理页面。
b.当我们点击取消时,进入登录用户配置提示页面,在该页面中,tomcat提示我们需要在tomcat-user.xml文件中去配置我们的登录帐号信息。
5.在tomcat-user.xml中配置远程服务器tomcat的账户信息
xml
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin"
roles="manager-gui,manager-script,manager-jmx,manager-status" />
6.修改 IP 访问权限
(1)关闭远程服务器的防火墙(测试时的方案)
(2)即解决使用ip地址访问被拒绝的问题
参考文档
(3)修改 /webapps/manager/META-INF/ 目录下的 context.xml 文件,而不是 /conf/ 目录下的 context.xml(一定要注意!!!)
将 allow开头的这一行
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
修改成
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />
7.登录ROOT项目,使用Manager App功能管理tomcat中的项目资源
8.maven远程上传war项目的配置和使用
xml
<!--8.插件统一管理,在子模块中去引用-->
<pluginManagement>
<plugins>
<plugin>
<!--(3)tomcat插件的坐标-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!--3.1maven远程热部署配置,以下配置均是给Maven自己看的-->
<!--(1)远程tomcat服务器Manager App管理页面请求-->
<url>http://192.168.10.6:8080/manager/text</url>
<!--(2)访问远程服务器tomcat的web项目的用户名与密码-->
<server>tomcat9</server>
<username>admin</username>
<password>1234</password>
<!--(3)发布的路径,与tomcat管理目录中的路径对应,/表示发布到根目录-->
<path>/gengducun</path>
<!--<update>true</update>会将发布目录下的数据清空-->
<update>true</update>
</configuration>
</plugin>
</plugins>
</pluginManagement>
(1)在maven项目的插件配置pom.xml中配置项目远程部署的参数信息。(如上)
(2)启动远程部署
也可以建立专用的热部署任务
(3)在本地浏览器中访问远程服务器下的tomcat项目即可
8.1注意
(1)在使用maven远程部署项目时,一定要确保linux下的tomcat是开启的。
(2)tomcat:run命令表示的是在本地的tomcat中运行项目。
(3)tomcat:deploy命令表示的是将本地的Maven项目打包发布到远程服务器上的tomcat中进行部署,部署之后可以在浏览器中直接访问。所以在进行热部署之前一定要保证远程服务器的tomcat处于启动状态中,不然会失败。
(4)maven项目配置的tomcat插件和我们下载到本地的tomcat不是同一个。
(5)虽然现在Maven中央仓库中支持的tomcat插件只支持到tomcat7这个版本,但是可以利用这个插件对Web项目进行热部署,热部署到远程服务器的tomcat服务器上,远程服务器上的tomcat版本可以是更高的版本,比如说tomcat8、9、10或更高的版本中。
9.tomcat虚拟目录配置
(1)如果Web项目中用到了图片服务器与文件服务器,可以通过虚拟出图片服务器与文件服务器的方案临时解决图片或文件上传下载的功能需求。
(2)大公司都貌似有专署的图片服务器与文件服务器,不在本文的讨论范畴之列。
(3)通俗点来说,Web项目如果有图片或文件要上传,虚拟目录就是给这些图片或文件找个地方存起来,但是不暴露真实地存储路径,直接通过path配置的虚拟路径名称就可以映射到docBase对应的磁盘真实路径。
xml
<Context docBase="E:\upload" path="/pic" reloadable="true"/>
<Context docBase="E:\download" path="/file" reloadable="true"/>
(4)注意:在tomcat的server.xml中配置虚拟目录的时候,不要加中文注释,不然无法启动tomcat。(这是我遇到的情况)