news 2026/3/10 15:56:59

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/3/5 13:20:46

APK图标编辑终极指南:5分钟快速上手完整教程

APK图标编辑终极指南&#xff1a;5分钟快速上手完整教程 【免费下载链接】apk-icon-editor APK editor to easily change APK icons, name and version. 项目地址: https://gitcode.com/gh_mirrors/ap/apk-icon-editor APK Icon Editor是一款功能强大的跨平台工具&#…

作者头像 李华
网站建设 2026/3/2 3:39:06

用Apache Iceberg重构大数据分析:5个实战技巧提升查询性能300%

用Apache Iceberg重构大数据分析&#xff1a;5个实战技巧提升查询性能300% 【免费下载链接】iceberg Apache Iceberg 项目地址: https://gitcode.com/gh_mirrors/iceberg4/iceberg 引言&#xff1a;告别传统数据湖的性能瓶颈 当你的数据分析平台面临TB级数据查询延迟、…

作者头像 李华
网站建设 2026/3/3 14:28:25

深入剖析SGLang框架中的工具调用机制创新

深入剖析SGLang框架中的工具调用机制创新 【免费下载链接】sglang SGLang is a structured generation language designed for large language models (LLMs). It makes your interaction with models faster and more controllable. 项目地址: https://gitcode.com/GitHub_T…

作者头像 李华
网站建设 2026/3/9 22:06:44

【收藏学习】AI大模型学习资源大全:从理论到实践的系统化教程

文章提供AI大模型系统化学习路径&#xff0c;涵盖数学基础、编程工具、机器学习基础、Transformer架构、预训练微调技术、模型训练全流程及行业落地挑战。推荐丰富学习资源&#xff0c;包括书籍课程、开源项目和社区论坛&#xff0c;强调理论与实践结合的重要性&#xff0c;帮助…

作者头像 李华
网站建设 2026/3/3 14:28:35

城通网盘直连解析工具:告别龟速下载的终极武器

还在被城通网盘的下载速度折磨得没脾气&#xff1f;每次下载文件都要经历漫长的等待和繁琐的验证&#xff1f;这款城通网盘直连解析工具将彻底改变你的下载体验&#xff0c;让你轻松实现高速下载方法&#xff0c;掌握下载优化技巧。 【免费下载链接】ctfileGet 获取城通网盘一次…

作者头像 李华
网站建设 2026/3/10 10:57:01

AI如何助力蓝牙水控器开发?5分钟生成完整代码

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个基于蓝牙5.0的智能水控器系统&#xff0c;要求包含以下功能&#xff1a;1. 蓝牙低功耗(BLE)通信模块&#xff0c;支持手机APP连接&#xff1b;2. 水流传感器数据采集和处理…

作者头像 李华