news 2026/4/27 0:19:58

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/4/25 17:12:46

Cocos粒子特效终极指南:从入门到精通的全流程解析

Cocos粒子特效终极指南&#xff1a;从入门到精通的全流程解析 【免费下载链接】cocos-engine Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-per…

作者头像 李华
网站建设 2026/4/24 3:12:14

CVAT标注工具:AI如何提升数据标注效率

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用CVAT标注工具&#xff0c;结合AI模型&#xff08;如YOLO或Mask R-CNN&#xff09;&#xff0c;自动标注图像中的目标物体。输入一组未标注的图片&#xff0c;AI模型会先进行预标…

作者头像 李华
网站建设 2026/4/16 12:54:56

千万不能错过!这3款外卖点单小程序,选对了让你天天吃好饭!

千万不能错过&#xff01;这3款外卖点单小程序&#xff0c;选对了让你天天吃好饭&#xff01;引言在快节奏的现代生活中&#xff0c;外卖已成为许多人日常饮食的重要组成部分。为了方便快捷地订餐&#xff0c;许多商家和平台纷纷推出了外卖点单小程序。本文将为您推荐三款优秀的…

作者头像 李华
网站建设 2026/4/25 18:44:47

震惊!正规外卖小程序竟藏这5大猫腻,商家千万注意!

震惊&#xff01;正规外卖小程序竟藏这5大猫腻&#xff0c;商家千万注意&#xff01; 在数字化餐饮时代&#xff0c;外卖小程序已成为商家拓展业务的重要渠道。然而&#xff0c;看似正规的外卖平台背后&#xff0c;往往暗藏着诸多不为人知的风险。作为餐饮从业者&#xff0c;了…

作者头像 李华
网站建设 2026/4/18 2:16:11

零基础入门:你的第一个VSCode插件开发指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个最简单的VSCode插件教学项目&#xff0c;功能是在状态栏显示当前时间。要求包含&#xff1a;1) 完整的环境配置说明 2) 分步骤代码讲解 3) 调试方法 4) 打包发布指南。使用…

作者头像 李华
网站建设 2026/4/25 18:59:22

Flipper Zero玩转Amiibo:2025年最酷的游戏解锁指南

还在为心爱的Amiibo玩具价格发愁&#xff1f;想要一键解锁《塞尔达传说》、《超级马里奥》中的隐藏内容&#xff1f;今天我们就来聊聊如何用Flipper Zero这个神奇的小设备&#xff0c;实现Amiibo的完美模拟&#xff01; 【免费下载链接】Flipper Playground (and dump) of stuf…

作者头像 李华