命令行打包maven项目并部署到tomcat

我们公司的后端是用maven来构建java项目,服务器用的tomcat,开发人员写代码是用myeclipse或者intellij idea,不管那种ide都特别耗内存,前端并不需要写java代码,但是前后端联调的时候为了把项目跑起来,也必须要使用这类ide,当然也可以用来写前端代码,但是不得不吐槽太烂了。

前端平时会选择自己的编辑器写代码,但是写完刷新浏览器并不能立马看到效果,因为需要等待myeclipse将文件同步到tomcat中,电脑稍差的,可能要等很久。为了提高工作效率,会使用grunt、gulp等自动化工具来完成一些重复的工作,比如代码压缩、修改版本号等,如果操作的文件过多甚至会导致电脑卡死。平时为了测试兼容性要开好几款浏览器,切图也要开AI/PS/FW以及其它杂七杂八的软件,再加上myeclipse这个特别占内存的ide,电脑就会很卡。。。

如果不用启动myeclipse,又能完成项目的部署,上面的这些的问题岂不是就能得到解决?能想到方法就是通过命令行去部署。

这里需要使用tomcat7-maven-plugin这个插件,在使用之前需要完成一些简单的配置:

1.配置环境变量

新建系统变量:

1
2
3
4
JAVA_HOME D:\Java\jdk1.6.0_39(jdk安装目录)
CLASSPATH .;%JAVA_HOME%\lib
CATALINA_HOME D:\Tomcat(tomcat根目录)
JAVA_OPTS -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m(不设置的话启动tomcat会报PermGen space错误)

Path中新增:

1
2
3
;%JAVA_HOME%\bin
;D:\maven\apache-maven-3.1.1\bin(maven目录下的bin目录)
;%CATALINA_HOME%\bin

2.修改配置文件

tomcat7-maven-plugin需要用到tomcat中的manager应用,检查webapps目录中有没有manager这个文件夹,没有的请下载,该应用默认是禁用的,开启它需要修改tomcat目录中/conf/tomcat-users.xml,在tomcat-users中新增:

1
2
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-script"/>

打开maven安装目录中/apache-maven-3.1.1/conf/settings.xml,在servers(settings子节点)中新增

1
2
3
4
5
6
<server>
<id>tomcat7</id>
<!-- username、password和tomcat-users.xml中的一致 -->
<username>admin</username>
<password>admin</password>
</server>

打开项目根目录中pom.xml,在plugins(build子节点)中新增:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<!-- server值和settings.xml中id相同 -->
<server>tomcat7</server>
<!-- username、password和tomcat-users.xml中的一致 -->
<username>admin</username>
<password>admin</password>
<!-- path值为项目名 -->
<path>/${project.artifactId}</path>
</configuration>
</plugin>

上面配置完成之后,首先需要启动tomcat,直接双击tomcat目录/bin/startup.bat或者在cmd中输入命令:

1
catalina.bat run

等待tomcat启动完毕后,cmd定位到项目根目录,输入命令:

1
mvn tomcat7:redeploy (后端提交java代码都要执行)

第一次执行可能会下载很多依赖包,部署过程中会在tomcat目录webapps文件夹下生成war文件以及对应文件名的文件夹,等部署完成,直接浏览器打开项目地址就可以了。如果在tomcat启动过程是由于少jar包导致报错了,需要将缺失的jar包放到项目根目录/src/main/webapp/WEB-INF/lib/中去;如果是PermGen space错误看看是不是环境变量中没有配置JAVA_OPTS(上面有说);如果是其它错误那就请教java开发人员吧。

这里强烈推荐vscode来写前端代码,里面自带了命令行终端用来完成项目打包部署,再安装svn插件用来更新和提交项目代码,通过gulp将前端代码同步到tomcat中,卧槽!想想就很爽!

note:

用gulp将文件同步到tomcat中建议使用gulp-changed这个模块,仅将修改的文件同步过去,这样会很快,该模块第二个参数hasChanged建议设置为changed.compareSha1Digest,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var gulp = require('gulp');
var changed = require('gulp-changed');
var url = './src/main/webapp/Contents/';
var tomcaturl = '../../tomcat/webapps/ROOT/Contents/';
gulp.task('movetotomcat', function(){
gulp.src([url+'**/*.*'])
.pipe(changed(tomcaturl, {hasChanged:changed.compareSha1Digest}))
.pipe(gulp.dest(tomcaturl))
});
gulp.task('watch', function(){
gulp.watch([url+'**/*.*'], ['movetotomcat']);
});
gulp.task('default', ['watch']);