centOS安装tomcat,部署打成war包的项目时,tomcat运行后能否删除原有的war包?

本文探讨了在Tomcat服务器上部署SpringBoot项目时,WAR包及其对应文件夹的操作注意事项。强调了不能在Tomcat运行状态下直接删除WAR包,否则会连同解压后的项目文件夹一并被删除。此外,还讲解了如何正确地更新部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没有写博客了。。。

       之前在把springboot项目打成war包后,部署到tomcat,后面在没有停止tomcat 的情况下,直接删除了war导致war包对应的文件夹也被删除。首先,war包是不能在tomcat运行时删除的,否则会删除对应的自动解压的工程,我们可以先停止tomcat后删除war包;其次呢,当我们重新部署项目的时候,如果webapps中已经有与war文件相同名字的文件夹,就不会重新部署。这里的重新部署的意思就是,不会再解压之前的war文件,也不会覆盖对应文件夹也就是工程下的可能已经被我们修改过的文件

        1. 为什么我们不能在tomcat正在运行的情况下删除war包呢?

        因为,tomcat在运行期, 会实时监控webapps目录下的war包文件,如果有新增的war,就去解压它; 如果有删除war的操作,就连同项目一起删除 ,也就是删除了war包对应的文件夹。如果我们需要删除war包,就需要先停止tomcat,再删除war包,这样就不会有什么影响。

        2. tomcat中的webapps中的war包和同名的已解压项目文件夹是怎么加载的?

        在tomcat启动的时候,回去webapps文件夹下查看所有的war包,并查看是否有同样名称的文件夹或者说工程,如果有,tomcat就不会再解压该war包,也不会去覆盖该文件夹下的文件。只有当我们删除war包对应的同名文件夹的时候,启动tomcat的时候才会再次进行解压war包的操作。

<think>我们正在处理一个关于如何将Ruoyi-Cloud项目模块打WAR文件并在CentOS 7Tomcat部署的问题。根据用户提供的引用信息,我们了解到Ruoyi项目是一个前后端分离的项目,并且有相关的部署步骤。但是,用户的问题是关于ruoyi-cloud项目的,这是一个微服务架构的项目,通常使用Spring Cloud,因此部署方式可能与传统的WAR部署有所不同。 然而,用户明确要求将模块打WAR文件并部署Tomcat。在微服务架构中,每个微服务通常可以打成可执行的JAR文件(使用内嵌Tomcat)或WAR文件(部署到外部Tomcat)。因此,我们可以将每个微服务模块打WAR文件。 步骤概述: 1. 修改每个需要部署WAR的模块的pom.xml,将打方式设置为war,并排除内嵌的Tomcat(避免与外部Tomcat冲突)。 2. 配置每个模块的启动类,使其继承SpringBootServletInitializer,以支持在外部Tomcat中启动。 3. 使用Maven进行打,生成WAR文件。 4. 将WAR文件部署CentOS 7上的Tomcat服务器中。 5. 启动Tomcat服务。 详细步骤: ### 1. 修改pom.xml 在每个需要打WAR的微服务模块的pom.xml中,修改打方式: ```xml <packaging>war</packaging> ``` 并排除内嵌的Tomcat依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> ``` 同,添加servlet-api依赖(provided作用域,表示由容器提供): ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> ``` ### 2. 修改启动类 每个微服务模块的启动类需要继承`SpringBootServletInitializer`,并重写`configure`方法: ```java @SpringBootApplication public class YourApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` ### 3. 打项目目录下,使用Maven命令打: ```bash mvn clean package ``` 打后,每个模块的target目录下会生成对应的WAR文件。 ### 4. 部署CentOS 7Tomcat - 将生成的WAR文件复制到Tomcat的webapps目录下(例如:/usr/local/tomcat/webapps)。 - 启动Tomcat(如果Tomcat正在运行,则复制WAR文件后会自动解压部署): ```bash cd /usr/local/tomcat/bin ./startup.sh ``` ### 5. 注意事项 - 确保CentOS 7上已安装Java环境,并且Tomcat版本与项目要求的Java版本兼容。 - 如果微服务之间有依赖(如注册中心、配置中心),确保这些服务已经启动。 - 根据实际情况配置每个微服务的配置文件(如application.yml),特别是数据库连接、服务注册中心地址等,这些配置需要指向正确的环境。 ### 6. 前端部署 根据引用[2],前端部分需要单独部署。进入前端项目(如ruoyi-ui),使用npm构建生产环境代码,然后将生成的dist目录下的文件部署到Nginx或Tomcat中。 ```bash cd ruoyi-ui npm run build:prod ``` 然后将dist目录下的文件部署到Web服务器。 ### 引用说明 在部署过程中,参考了若依项目部署文档(引用[2][3])以及Jenkins部署的相关内容(引用[4])。但请注意,ruoyi-cloud的部署可能还需要考虑服务注册中心(如Nacos)的部署配置,因为微服务项目通常需要服务发现配置管理。 [^1]: 部署collectorweb的步骤参考。 [^2]: Ruoyi前端部署步骤。 [^3]: 若依项目地址MYSQL安装。 [^4]: Jenkins安装部署。 §§相关问题§§ 1. 如何将Spring Boot应用打WAR文件? 2. 在外部Tomcat部署Spring Boot应用需要注意哪些问题? 3. Ruoyi-cloud微服务项目部署,服务注册中心(如Nacos)应该如何部署配置? 4. 如何配置Ruoyi-cloud的数据库连接信息? 5. 如何在前端部署配置后端API的代理?</think>### 将 Ruoyi-Cloud 模块打WAR 文件并部署Tomcat 的步骤 #### 一、修改项目配置(关键步骤) 1. **修改 pom.xml** - 在需要部署的模块(如 `ruoyi-auth`、`ruoyi-gateway` 等)的 `pom.xml` 中: ```xml <!-- 修改打方式 --> <packaging>war</packaging> <!-- 排除内嵌 Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加 Servlet 依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> ``` 2. **修改启动类** ```java @SpringBootApplication public class RuoyiApplication extends SpringBootServletInitializer { // 继承 SpringBootServletInitializer @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(RuoyiApplication.class); } public static void main(String[] args) { SpringApplication.run(RuoyiApplication.class, args); } } ``` #### 二、打 WAR 文件 1. 在项目目录执行 Maven 命令: ```bash mvn clean package -DskipTests ``` 2. 生成的 WAR 文件位于各模块的 `target/` 目录下,例如: - `ruoyi-auth/target/ruoyi-auth.war` - `ruoyi-gateway/target/ruoyi-gateway.war` #### 三、CentOS 7 部署Tomcat 1. **上传 WAR 文件** ```bash scp ruoyi-*.war user@centos_ip:/opt/tomcat/webapps/ ``` 2. **重命名为 ROOT.war(可选但推荐)** 在 Tomcat 的 `webapps/` 目录执行: ```bash mv ruoyi-gateway.war ROOT.war # 主入口模块建议重命名 mv ruoyi-auth.war auth.war # 其他模块按需命名 ``` > 说明:重命名为 `ROOT.war` 后可通过 `http://ip:port/` 直接访问,否则需路径后缀(如 `/ruoyi-gateway`)[^1] 3. **启动 Tomcat** ```bash /opt/tomcat/bin/startup.sh ``` 4. **验证部署** - 检查日志: ```bash tail -f /opt/tomcat/logs/catalina.out ``` - 访问服务: ``` http://centos_ip:8080/ # 若命名为 ROOT.war http://centos_ip:8080/auth/ # 其他模块 ``` #### 四、配置文件调整 1. **解决端口冲突** 在 `application.yml` 中关闭内嵌服务器: ```yaml server: port: -1 # 禁用内嵌端口 ``` 2. **注册中心配置** 确保 `bootstrap.yml` 中的 Nacos 地址指向正确: ```yaml spring: cloud: nacos: server-addr: 192.168.1.100:8848 # 修改为实际Nacos地址 ``` #### 五、前端部署(可选) 若需部署前端: 1. 构建前端: ```bash cd ruoyi-ui npm run build:prod # 生成 dist 目录[^2] ``` 2. 将 `dist/` 内容部署到 Nginx 或 Tomcat > **注意**: > - 微服务模块需按依赖顺序启动(先启动 Nacos、Auth 等基础服务) > - 生产环境建议使用 Nginx 反向代理解决端口问题 --- ### 常见问题解决 1. **启动报错 `No SpringApplicationContext`** 检查是否遗漏了 `SpringBootServletInitializer` 的继承。 2. **注册中心无法连接** 确认防火墙开放端口(8848/Nacos, 8080/Tomcat): ```bash firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload ``` 3. **静态资源加载失败** 前端独立部署,在 `ruoyi-ui/.env.production` 中配置后端 API 地址: ``` VUE_APP_BASE_API = 'http://centos_ip:8080/' ``` [^1]: 部署重命名 WAR 为 ROOT.war 可简化访问路径。 [^2]: 前端构建命令参考 Ruoyi 官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值