【04】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上

news2024/11/9 4:23:21

1.虽然现在Maven中央仓库中支持的tomcat插件只支持到tomcat7这个版本,但是可以利用这个插件对Web项目进行热部署,热部署到远程服务器的tomcat服务器上,远程服务器上的tomcat版本可以是更高的版本,比如说tomcat8、9、10或更高的版本中。

将Maven项目热部署到远程tomcat中

文章目录

  • 将Maven项目热部署到远程tomcat中
    • 1.为什么要写这篇文章?
      • 1.1web项目分模块开发
      • 1.2分模块开发解决项目管理的灵活性的主要表现
    • 2.一键热部署解决方案
    • 3.一键热部署实现思路
    • 4.Tomcat中的Root项目的配置和使用
    • 5.在tomcat-user.xml中配置远程服务器tomcat的账户信息
    • 6.修改 IP 访问权限
    • 7.登录ROOT项目,使用Manager App功能管理tomcat中的项目资源
    • 8.maven远程上传war项目的配置和使用
      • 8.1注意
    • 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的账户信息

<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项目的配置和使用

    <!--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对应的磁盘真实路径。

	      <Context docBase="E:\upload" path="/pic" reloadable="true"/>
	      <Context docBase="E:\download" path="/file" reloadable="true"/>

(4)注意:在tomcat的server.xml中配置虚拟目录的时候,不要加中文注释,不然无法启动tomcat。(这是我遇到的情况)

10.参考文档

参考文档

11.视频教程

视频教程1

视频教程2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

解决:使用EasyExcel导入Excel模板时出现数据导入不进去的问题

解决&#xff1a;使用EasyExcel导入Excel模板时出现数据导入不进去的问题 在Java中&#xff0c;当我们用EasyExcel导入Excel时&#xff0c;可能会出现数据导入不进去的问题。例如&#xff1a; 这种异常等。 问题原因1&#xff1a;这个1代表从第几行开始&#xff0c;你的exce…

在vscode中开发运行uni-app项目

确保电脑已经安装配置好了node、vue等相关环境依赖 进行项目的创建 vue create -p dcloudio/uni-preset-vue 项目名 vue create -p dcloudio/uni-preset-vue uni-app 选择模版 这里选择【默认模版】 项目创建成功后在vscode中打开 第一次打开项目 pages.json 文件会报错&a…

如何修改WordPress经典编辑器的默认高度?

boke112百科有一个使用WordPress搭建的小网站&#xff0c;文章内容就是几个字不到一行&#xff0c;但是每次使用经典编辑器编辑文章时&#xff0c;都觉得编辑器默认高度太高了&#xff0c;影响了我添加文章摘要和其他属性&#xff0c;有没有办法修改WordPress经典编辑器的默认高…

汽车广告常见特效处理有哪些?

​汽车广告作为展示汽车性能和外观的重要媒介&#xff0c;常常需要借助特效来增强视觉效果&#xff0c;吸引观众的注意力。以下是一篇关于汽车广告中常见特效处理的文章。 在竞争激烈的汽车市场中&#xff0c;广告不仅是推广产品的工具&#xff0c;更是艺术和科技的结合。特效技…

从0开始学习机器学习--Day19--学习曲线

一般来说&#xff0c;如果一个算法的表现不理想&#xff0c;那么多半是因为出现了欠拟合或过拟合问题&#xff0c;这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题&#xff0c;亦或是二者皆有&#xff0c;这有助于我们精准定位问题所在。 之前&#xff0c;我们发现…

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

LLM训练”中的“分布式训练并行技术;分布式训练并行技术

目录 “LLM训练”中的“分布式训练并行技术” 分布式训练并行技术 数据并行 流水线并行:按阶段(stage)进行切分 张量并行 序列并行 多维混合并行 自动并行 MOE并行 重要的分布式AI框架 “LLM训练”中的“分布式训练并行技术” 随着深度学习技术的不断发展,特别是…

论文阅读:Computational Long Exposure Mobile Photography (二)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章&#xff0c;介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像&#xff0c;用运动模糊来呈现场景中的移动元素。它通常有两种模式&#xff0c;分别产生前景模糊或…

测试概念以及测试bug

关于测试的概念 什么是需求&#xff1f; 需求分为用户需求和软件需求。 软件需求可以作为开发和测试工作的依据&#xff0c;而用户需求不一定是合理的&#xff0c;这里的不合理有很多的角度&#xff1a;技术角度上&#xff0c;市场需求上&#xff0c;投入成本和收益比噔噔。…

mac m1 docker本地部署canal 监听mysql的binglog日志

mac m1 docker本地部署canal监听mysql的binglog日志(虚拟机同理) 根据黑马视频部署 1.docker 部署mysql 1.docker拉取mysql 镜像 因为m1是arm架构.需要多加一条信息 正常拉取 docker pull mysql:tagm1拉取 5.7的版本. tag需要自己指定版本 docker pull --platform linux/x…

C++之旅——入门

Hello&#xff0c;各位小伙伴们&#xff0c;前几期我们学习了C语言和数据结构&#xff0c;有了一定的基础之后我们来挑战新的语言——C。 目录 一、初识C 1>C发展历史 2>C版本更新 3>C的热度 4>C的学习难度 5>C学习相关书籍 二、第一个C代码 三、C基础 …

Flutter中文字体设置指南:打造个性化的应用体验

在使用Flutter进行开发时&#xff0c;可能会遇到中文字体显示不正常或者字体不符合设计需求的情况。Flutter默认的中文字体往往无法满足某些用户对个性化和美观的需求。今天&#xff0c;我们就来详细探讨如何在Flutter应用中设置中文字体&#xff0c;并结合不同场景提供相应的解…

4.1 软件设计概要

软件设计概要 1、 软件设计的概念和设计质量1.1 软件设计基本任务1.2 设计模型1.3 软件设计特点1.4 设计质量属性1.5 设计指导原则 2、 设计相关八大概念抽象体系结构设计模式模块化信息隐藏功能独立精化重构 3、 四类设计技术概要3.1 数据设计3.2 体系架构设计体系结构组织和细…

MySQL表的增删改查(CRUD2)

美好的一天又开始了&#xff0c;大家今天有没有学习呢&#xff1f;没学的话&#xff0c;开始跟随和博主一起对MYSQL的学习吧&#xff01;&#xff01;&#xff01; 复习&#xff1a; CRUD新增1.新增 insert into 表名 [(列名[&#xff0c;列名,列名...])] values (值[,值,值.…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始&#xff0c;苹果推出了全新的测试机制&#xff1a;Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式&#xff0c;并且使得单元测试更加灵动自由&#xff0c;更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件&#xff0c;需要通过一列的文件名称&#xff0c;按照规则给批量上传图片附件。 原始文件&#xff1a; 成功后文件&#xff1a; 二、实现方法 1. 使用【wps】工具打开Excel文件&#xff0c;将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

Springboot项目报错记录

SpringBoot测试报错&#xff1a;Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

RabbitMQ 高级特性——消息分发

文章目录 前言消息分发RabbitMQ 分发机制的应用场景1. 限流2. 负载均衡 前言 当 RabbitMQ 的队列绑定了多个消费者的时候&#xff0c;队列会把消息分发给不同的消费者&#xff0c;每条消息只会发送给订阅列表的一个消费者&#xff0c;但是呢&#xff0c;RabbitMQ 默认是以轮询…

深度学习:bert模型

multi-headed机制 1、通过不同的head得到多个特征表达&#xff0c;一般8个head 2、将所有特征拼接在一起 3、降维&#xff0c;将Z0~Z7连接一个FC全连接实现降维 多层堆叠 位置编码 如何实现位置编码&#xff1f; &#xff08;1&#xff09;为每个时间步添加一个0-1范围内的数…