news 2026/7/14 10:36:33

Tomcat部署ssm聚合项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tomcat部署ssm聚合项目

目录

ssm聚合项目

注意事项


  1. ssm聚合项目

以 “hami 音乐项目” 为例,hami_parent是父工程,打pom包(需同步到本地仓库供其他项目使用,主要就是依赖管理)。除了hami_core(打jar包,需同步到本地仓库供其他项目使用)其他均为web项目,hami_console 和 hami_portal 都依赖了hami_core。

ham-project (父工程,POM) ├── ham-core (公共模块, JAR) ├── ham-console (Web模块, WAR) ├── ham-portal (Web模块, WAR) └── ham-file (Web模块, WAR)
  1. 打包:遵循一个原则,先打包公共模块。hami_parent直接在maven管理里执行clean 和install。此时会自动打包上面所有模块并同步到本地仓库。
  2. 放置:将 WAR 包复制到 Tomcat 的 webapps 目录下。
  3. 修改配置文件:Tomcat安装目录/config/server.xml。
<Service name="Catalina1"> <Connector port="8085" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="UTF-8"/> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/> <Engine name="Catalina1" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context docBase="hami_file" path="/" reloadable="true"/> </Host> </Engine> </Service> <Service name="Catalina2"> <Connector port="8075" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="UTF-8"/> <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/> <Engine name="Catalina2" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context docBase="hami_portal-1.0-SNAPSHOT" path="/" reloadable="true"/> </Host> </Engine> </Service> <Service name="Catalina3"> <Connector port="8089" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="UTF-8"/> <Connector port="8012" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/> <Engine name="Catalina3" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context docBase="hami_console-1.0-SNAPSHOT" path="/" reloadable="true"/> </Host> </Engine> </Service>
path为上下文。
  1. 启动:双击 bin/startup.bat (Windows) 或执行 ./startup.sh (Linux) 启动 Tomcat。
  2. 访问:Tomcat 会自动解压 WAR 包。访问地址为 http://IP地址:端口号/ (例如: http://localhost:8080/)。
  1. 注意事项

  1. 部署项目后的上下文
对于普通javaweb项目以及maven javaweb项目部署到Tomcat后访问页面必须要加在webapps里的文件名(因为Tomcat 默认以 “部署文件名” 作为项目的上下文路径),访问Servlet的路径也要加上webapps的文件名(如果页面里涉及到访问Servlet需要修改代码,修改完如果要在开发软件里运行测试还需要修改Tomcat的上下文路径)。但是ssm项目则也需要,因为springmvc框架只是负责解析请求时忽略上下文路径,即 让 Controller 无需关心上下文。
  1. 对于hami_parent的打包后的变化
对于哈米音乐这个项目,hami_parent(父工程)只是做依赖管理(打pom包),本身不会生成 JAR 包或者其他,也不会有 target 目录,这是由它在 Maven 聚合项目中的 “角色定位” 决定的。
Maven 中的父工程(ham_parent)本质是一个 “POM 类型项目”,它的唯一作用是:
  • 统一管理所有子模块(ham_core、ham_console 等)的依赖版本(通过 );
  • 统一配置所有子模块的构建规则(如插件版本、编译环境等,通过 );
  • 聚合所有子模块,方便一次性构建整个项目(通过 标签)。
它不包含任何可编译的 Java 代码(没有 src/main/java 目录),所以根本不需要打包成 JAR/WAR—— 因为没有代码可打包,自然也不会生成 target 目录(target 是用来存放编译、打包产物的,没产物就不会有这个目录)。
父工程执行 mvn install 时,只会把它的 POM 文件(hami_parent-1.0-SNAPSHOT.pom)安装到本地仓库,不会生成 JAR 包。
  1. 打包父工程会出现的情况
Maven 聚合项目的核心特性 ——“一键构建所有子模块”。当你对父工程(hami_parent)执行 install 或 package 时,Maven 会自动识别父工程 pom.xml 中配置的所有子模块,然后按依赖顺序自动构建所有子模块,不需要你手动逐个打包。
原因: hami_parent 的 pom.xml,里面一定有一段 配置,它明确告诉了 Maven:“这个父工程包含哪些子模块”。
过程:
  • 识别子模块:打包时Maven会通过 标签,找到所有子模块的路径(默认是父工程目录下的子文件夹);
  • 按依赖顺序构建:Maven 会先分析子模块间的依赖关系(比如 hami_console 依赖 hami_core),然后按 “先构建被依赖模块,再构建依赖模块” 的顺序,自动对每个子模块执行相同的命令(比如你执行 install,子模块也会自动执行 install)。
  1. 对于聚合项目的打包顺序
Maven 聚合项目中,打包的核心逻辑是:
  • 被依赖的模块必须先打包(install),生成的 JAR 包会被安装到本地 Maven 仓库(默认路径:C:\Users\你的用户名\.m2\repository)。
  • 依赖其他模块的模块后打包,打包时会从本地仓库中获取被依赖模块的 JAR 包,并将其嵌入到自己的 WAR 包中。
如我先打包了依赖其他模块的项目,会报错说找不到jar包或者被依赖项目里的包。
检测是否成功打包依赖其他模块的项目:将生成的 ham-console.war 解压(用压缩软件打开),查看 WEB-INF/lib 目录:应该能看到 ham-core-1.0-SNAPSHOT.jar(及其他依赖的 JAR 包),说明依赖已正确嵌入。
  1. Maven 聚合项目中的公共模块 JAR 包,不能直接放到 Tomcat 的webapps目录下
正确做法:将公共模块 JAR 包通过 mvn install 命令安装到本地 Maven 仓库。
原因:
Maven 在打包console.war时,会根据这个声明去本地仓库里寻找core-1.0-SNAPSHOT.jar。
找到后,Maven 会自动把core.jar文件打包进console.war的WEB-INF/lib目录下。
最终部署到 Tomcat 的console.war包,其实已经内置了它所需要的core.jar。Tomcat 启动时,会加载这个WEB-INF/lib目录下的所有 JAR 包。
Tomcat 的webapps目录是用来存放 ** 完整的 Web 应用(WAR 包)** 的。它不会去解析一个孤零零的 JAR 包,也不知道这个 JAR 包应该被哪个 Web 应用使用。
即使你把core.jar放到webapps目录,console.war在启动时也找不到它,因为它期望的core.jar是在自己的WEB-INF/lib里面。
  1. hami项目部署到本地后 如果要在idea上使用这个tomcat 把配置文件里新加的注释了 不然会出错 原因复杂 不易深究
  2. 打包时,出错
先看控制台那个目录出错,如果控制台的报错不够详细和具体,可以在target目录下的surefire-reports 目录下找对应的.txt文件,看详细的日志,里面会显示具体出错原因,出错代码位置等。
  1. 启动Tomcat时,出错
去Tomcat安装目录下的logs目录下找启动出错的年月日对应的日志,打开后找到启动出错的时分秒对应的日志。最新的日志会在最后。
  1. 部署项目后删除Tomcat里的项目
需要删除webapps里的包和解析出来的文件夹,如果使用ssm聚合项目的部署方式,修改了 conf目录删除时需要复原,在删除conf下对应的catalina
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 21:32:23

DLT Viewer终极指南:从入门到精通的嵌入式日志分析完整教程

DLT Viewer终极指南&#xff1a;从入门到精通的嵌入式日志分析完整教程 【免费下载链接】dlt-viewer 项目地址: https://gitcode.com/gh_mirrors/dlt/dlt-viewer 在当今复杂嵌入式系统和汽车电子领域&#xff0c;高效的日志分析工具已成为开发调试的必备利器。DLT View…

作者头像 李华
网站建设 2026/7/13 21:32:22

如何快速批量下载TikTok封面:完整操作指南

对于内容创作者和自媒体运营者来说&#xff0c;建立高质量的封面素材库是提升内容质量的关键环节。传统手动截图保存的方式不仅效率低下&#xff0c;还面临画质压缩、管理混乱等问题。本文将详细介绍如何使用TikTokDownload工具的封面下载功能&#xff0c;实现高效的批量处理。…

作者头像 李华
网站建设 2026/7/13 21:32:21

nvm-desktop终极指南:高效管理Node.js版本控制方案

还在为Node.js版本切换烦恼吗&#xff1f;nvm-desktop为开发者提供了桌面化的版本管理解决方案&#xff0c;让你告别复杂的命令行操作&#xff0c;轻松掌控开发环境。 【免费下载链接】nvm-desktop 项目地址: https://gitcode.com/gh_mirrors/nv/nvm-desktop 开发者痛点…

作者头像 李华
网站建设 2026/7/13 21:32:20

Django开发效率翻倍:5个必知技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个Django项目优化工具集&#xff0c;包含&#xff1a;1)自动化测试脚本生成器 2)数据库迁移辅助工具 3)API文档自动生成 4)性能分析插件 5)部署配置模板。要求每个工具都能独…

作者头像 李华
网站建设 2026/7/13 21:32:20

开源大模型微调与部署实战指南:从零开始掌握LLaMA Factory工具全流程

文章介绍了开源大模型的概念及LLaMA Factory工具的使用。详细讲解了模型微调流程&#xff0c;包括数据集准备&#xff08;Alpaca、ShareGPT等多种格式&#xff09;、训练参数配置、模型合并与量化技术。最后介绍了模型评估、分布式训练以及多种部署方式&#xff0c;如GGUF格式转…

作者头像 李华
网站建设 2026/7/14 11:00:19

Windows Cleaner:5分钟彻底解决C盘空间不足的终极方案

还在为C盘爆红而烦恼吗&#xff1f;Windows Cleaner作为一款专业的Windows系统优化工具&#xff0c;能够快速扫描并清理系统垃圾文件&#xff0c;让你的电脑重获新生。无论是临时文件堆积、浏览器缓存膨胀还是软件残留文件&#xff0c;这款工具都能轻松应对。 【免费下载链接】…

作者头像 李华