一、前言
最近我发现了一款开源的 Web 接口管理项目 —— sosoApi。不同于我所熟悉的 SpringBoot 或传统的 SpringMVC 结构,sosoApi 采用了 SpringMVC + Maven 的架构,并且依赖于一个包含多个模块的子项目。为了能够在本地顺利搭建这个项目,我详细记录了搭建过程,以便日后查阅和参考。
二、项目导入
使用 IDEA 打开项目,基本项目结构图,如下图左侧:
这其实是两个项目,多个 pom.xml 导致 IDEA 没有正确识别到 Maven 项目。
第一个项目 framework,是一个多模块项目,有 4 个子模块。
第二个项目 sosoapi-web,pom.xml 依赖了第一个项目中的 4 个包。
选择第一个项目 framework 的 父 pom.xml,右键选择 Add as Maven Project
; 选择第二个项目 sosoapi-web 的 pom.xml,同样的操作。
至此,成功识别出 Maven 项目,如上图右侧。
正常情况下,单个 Maven 项目使用 IDEA 打开就是识别到,不用做上述的操作。
三、配置修改
创建数据库,执行初始化 sql 脚本。
项目配置文件,修改数据库连接、项目 http 基础路径等等。
本项目 framework 被 sosoapi-web 依赖,使用 mvn clean install 安装到本地仓库。
四、配置 Tomcat
首先明确,Tomcat 7 支持 jdk1.6 和 jdk1.7,Tomcat 8 最高支持 jdk8,Tomcat 9 则支持 jdk8 及以上版本。
tomcat7-maven-plugin 内置的是 tomcat7,tomcat8-maven-plugin 内置的是 tomcat8。此插件已停止更新,最新就是 tomcat8。
本项目的 pom.xml 使用的是 tomcat7-maven-plugin 插件,内置的 tomcat7 容器实测可以运行 jdk8 编译的项目,估计是没有运用一些不兼容的 jdk8 特性,支持 jdk8 的 lambda。
另外,实测内置 Tomcat7 容器和远程部署的方式都不支持热更新,内置容器重新启动更快一些,所以优先选择内置容器。简单来说,如果内置 Tomcat7 容器支持我们的项目,就用内置的;不支持就用插件的远程部署功能,将 WAR 文件部署到本地的 Tomcat 9 上面。
1、tomcat7-maven-plugin 插件引入 (内置 tomcat7 方式)
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/sosoapi_web</path>
</configuration>
</plugin>
2、远程部署方式(外置 Tomcat,如 Tomcat 9)
2.1 配置可操作 tomcat 的权限用户
在 tomcat 的配置文件 /conf/tomcat-user.xml 中添加权限用户。manager-script 是内置角色,用于通过接口管理 tomcat 的启动、停止等等。
username、password 随意设置,后续 pom.xml 要填入一样的设置。
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-script"/>
2.2 配置 Maven 集成 tomcat7-maven-plugin
这里有两种配法,一是 tomcat 用户的账号密码写到 maven 的 setting.xml 里面,二是写到 pom.xml 里面。这里选择第二种,原因是减少文件的维护。
2.2.1 tomcat 密码配置到 setting.xml
<server>
<id>tomcat9</id>
<username>gavin</username>
<password>gavin123</password>
</server>
pom.xml 中 tomcat7-maven-plugin 配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/sosoapi_web</path>
<update>true</update>
<url>http://localhost:8080/manager/text</url>
<server>tomcat9</server>
<!--port></port-->
<!--uriEncoding>UTF-8</uriEncoding-->
</configuration>
</plugin>
2.2.2 tomcat 密码配置到 pom.xml (推荐)
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/sosoapi_web</path>
<update>true</update>
<url>http://localhost:8080/manager/text</url>
<username>gavin</username>
<password>gavin123</password>
</configuration>
</plugin>
3、tomcat7-maven-plugin 配置项介绍
<url> 指向 Tomcat 的管理器应用程序,提供部署、停止等接口。/manager/text 是固定的。
<update>true</update> true 表示部署的时候,如果 WAR 文件已经存在 Tomcat 中,自动取消它(undeploy),然后再部署。正常 WAR 存在,要使用
mvn tomcat7:redeploy
重新部署,使用此配置,部署用一个命令就够了:mvn tomat7:deploy
。url、server、username、password、update 都是远程部署的参数,使用内置容器不用配置。
五、启动项目
1、内置 Tomcat 7 容器
mvn tomcat7:run
2、外置 Tomcat 9 容器
启动本地安装的 Tomcat 9 服务器,执行命令发布到 Tomcat 9 中:
mvn tomat7:deploy
上述命令,可通过 IDEA | Maven | Plugins | tomcat7 找到,不用敲指令,直接点击运行即可。修改生效:点击 Rerun 重新运行项目。
浏览器访问:http://localhost:8080/path(对应插件配置的 path)
六、打包
mvn clean package -Dmaven.test.skip=true