当前位置: 首页 > news >正文

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
http://www.cnnetsun.cn/news/18458.html

相关文章:

  • DLT Viewer终极指南:从入门到精通的嵌入式日志分析完整教程
  • 如何快速批量下载TikTok封面:完整操作指南
  • nvm-desktop终极指南:高效管理Node.js版本控制方案
  • Django开发效率翻倍:5个必知技巧
  • 开源大模型微调与部署实战指南:从零开始掌握LLaMA Factory工具全流程
  • Windows Cleaner:5分钟彻底解决C盘空间不足的终极方案
  • Python + Ursina设计一个有趣的3D小游戏
  • 企业级Spring应用启动失败排查实战
  • GeoJSON.io:零基础地理数据编辑工具完全指南
  • 特斯拉11月在美销量跌至近四年低点,廉价车型未扭转颓势
  • LangChain4j 比 SolonAI 强在哪?弱在哪?
  • CodeQwen1.5微服务开发实战:从架构设计到部署上线的完整指南
  • 从零玩转RT-Thread(20):为什么需要定时器?——定时器的应用场景
  • eino框架结构化输出解析:从混乱文本到精准数据的魔法转换
  • 小爱音箱终极音乐解放方案:XiaoMusic完整使用指南
  • 从零打造专业级Vue滑块控件:vue-slider-component深度实践指南
  • AnuPpuccin主题深度体验:5个技巧让你的Obsidian笔记焕然一新
  • AI一键搞定!Linux安装JDK17的最佳实践
  • Win11Debloat:释放系统潜能,打造专属纯净Windows体验
  • Python Web开发终极指南:用Ludic框架重构你的前端体验
  • F2批量重命名终极指南:从入门到精通的完整解决方案
  • 深蓝词库转换工具的技术架构与应用实践
  • 2025年CLIP模型爆发:从跨模态基座到产业变革的技术革命
  • 腾讯混元图像3.0登顶全球!800亿参数重构AIGC行业格局
  • halcon求区域交集——intersection
  • 如何用5分钟掌握AMD Ryzen处理器深度调试技巧?终极完整教程
  • 终极Nginx Web界面管理指南:从入门到精通的一站式解决方案
  • 收藏!大模型推理核心:从Prefill到KVCache,小白也能懂的底层逻辑
  • PySceneDetect终极指南:零基础实现智能视频场景自动化分割
  • 5分钟搞定Windows应用拦截:效率提升指南