Maven自动部署War

昨天的重装环境也是为了实验自动化部署,踩了好多坑,但还是做到了,也许这就是不看英文文档的苦吧

大致思路

网上找了一些教程,我大概懂了这个部署的流程,首先在远程tomcat的tomcat-users.xml里添加管理员,然后在maven的settings.xml里设置访问tomcat的账号密码,最后在项目的pom.xml设置远程服务器的地址,输入命令就自动部署了

第一步

登录服务器,在tomcat的../tomcat/conf/tomcat-users.xml添加如下代码

1
2
3
4
5
6
7
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>

其实这个就是一个大坑,Tomcat会提示你,很多教程也会告诉你Tomcat8以后

Users with the manager-gui role should not be granted either the manager-script or manager-jmx roles.

也就是manager-gui,manager-script,manager-jmx 不能一起被授权

结果听话的我,就一直只填一个角色,然后一直不成功,服务器提示401未授权错误

第二步

在maven的settings.xml里设置访问tomcat的账号密码

这个文件的位置也是在../maven/conf/settings.xml,当然这是自己安装的maven目录下,如果是IDEA自带的maven3,可以设置在~/.m2/settings.xml

1
2
3
4
5
<server>
<id>productionServer</id>
<username>admin</username>
<password>123456</password>
</server>

第三步

在项目的pom.xml设置远程服务器的地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<build>
<finalName>MavenDemo</finalName>

<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<server>productionServer</server>
<url>http://122.45.66.201/manager/text</url>
<path>/MavenDemo</path>
</configuration>
</plugin>
</plugins>
</build>

这里的这个插件tomcat7-maven-plugin是Tomcat 8*也适用的

地址必须是IP+/manager/text

path里的是访问地址,也是项目在webapps里的位置

一些坑

项目的jdk和服务器的jdk版本要一样

除了这个之外,我们还需要注意如果你用的是Tomcat 8.5,我们还要再做一个配置

conf/Catalina/localhost/manager.xml里写入(如果没有就创建)

1
2
3
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>

因为Tomcat 8.5之后对安全访问增强了,不仅仅需要配置管理帐号还需要配置允许远程访问管理员账户

修改后直接生效无须重启
在官方文档中提到:每个web应用应该有自己的安全管理文件(manager.xml)如果没有使用默认值 也就是不能远程访问,所以如果需要远程访问就需要创建manager.xml来指定允许远程访问规则

后来应用到实际项目的时候,你会发现上传的大小受限制了,所以要改Nginx的配置

1
2
3
4
5
6
7
8
server {
listen 80;
server_name XX.com;
location /{
proxy_pass http://192.168.0.12:8080;
client_max_body_size 500M; //添加这一句
}
}

如果你还使用了mybatis的自动生成工具org.mybatis.generator,请一定要注释掉它

使用

可以用IDEA的右侧maven可视化插件按钮,点击tomcat7:redeploy

如果你安装过maven,也可以使用命令:mvn tomcat7:redeploy

这里不用deploy,因为据说会出错,所以就用redeploy好了