Maven系列(四)Maven热部署

时间:2022-09-16 21:22:16
我所在的公司用的是GitLab.CI进行项目额持续集成
就是自己搭建一个集成平台,开发者本地将代码通过Git push到服务器端,服务器自动编译-打包-发布等等,脚本可自己编写。
现有一个任务是将原先的项目发布改成maven热部署,也就是说发布到tomcat中后,不需要重启tomcat。

当我知道有这个功能的时候,内心是喜悦的,也明确了我今后要了解的只是
1、GitLab.CI 的原理
2、脚本的编写
3、maven热部署


第三点,可以在网上查找到很多资料;

第二点,原有的项目里已经有写好的脚本,我在原先的基础上加以修改就行了;

第一点,就是要了解GitLab.CI和要学习的东东;


通过网上查找并结合自身的项目,maven热部署的过程配置总结如下:

1、修改tomcat-user配置文件;

2、修改pom配置文件;

3、修改maven的setting配置文件


修改user配置文件一是为了管理员进入tomcat管理页面并提高其安全性,二是为了在maven设置正确的用户名;
找到tomcat-user配置文件,放掉注释,并修改,如下

<pre name="code" class="html"><role rolename="manager-gui" />
<role rolename="manager-script" />
<role rolename="admin"/>
<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,admin,manager" />

重启tomcat,进入tomcat服务器根目录,点击“manager app”输入用户名和密码,成功进入管理页面,说明第一步配置成功。在pom中加入下面配置        
<plugins>
<!-- tomcat热部署 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<url>http://localhost:8080/manager/text</url><!--地址为tomcat地址>
<server>tomcat</server>
<path>/webProject</path><!--部署成功后,可输入localhost:8080/webProject进入项目-->
<username>tomcat</username><!--对应的用户名-->
<password>tomcat</password><!--对应的密码-->
</configuration>
</plugin>

</plugins>


配置maven的setting文件,加入下面配置
<server>
<id>test</id>
<username>tomcat</username>
<password>tomcat</password>
</server>

如果上面pom中没有配置用户名和密码,则使用setting里的配置,如果有的话,就是用pom里的配置(就近原则)

配置完记得要 maven-update

最后来验证一下:
启动tomcat服务器,保证里面没有发布任何项目;
如果是eclipse,直接右键项目---run as ---maven bulid...输入“tomcat:redeploy”
如果使用的是命令行,直接输入“mvn tomcat:redeploy”

如图

Maven系列(四)Maven热部署

测试通过,输入地址可以正常的访问!

以上是本地的配置,远程服务器也是一样,
修改url、修改tomcat的用户名和密码、修改ci脚本,通过git上传代码后
就会按照ci脚本里的命令来执行!测试也通过,唯一的不足就是“花费时间”,一个项目需要一两分钟
(都是这样还是我这边项目或脚本有问题,希望指出~~~)

可能会遇到的问题
1、项目打包名称的问题,有可能会报“ can not found XXX.war包”
检查一下pom里配置项目名和打包后的报名是否一致;
2、出现“ Cannot invoke Tomcat manager: Error writing to server
可能是tomcat6或7的问题
将pom里的url改为
http://localhost/manager/text 或http://localhost/manager/html

这是我遇到的两个问题和解决方法


对于GitLabCI,我要了解他的原理和学会编写脚本,并尝试自己搭建一个集成环境~~~