Tomcat部署ssm聚合项目
2026/6/3 2:31:27 网站建设 项目流程

目录

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询