在持续集成服务器上使用怎样的 mvn 命令集成项目,这个问题乍一看答案很显然,不就是 mvn clean install 么?事实上比较好的集成命令会稍微复杂些,下面是一些总结:
-
不要忘了clean: clean能够保证上一次构建的输出不会影响到本次构建。
-
使用deploy而不是install: 构建的SNAPSHOT输出应当被自动部署到私有Maven仓库供他人使用,这一点在前面已经详细论述。
-
使用-U参数: 该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新,而持续集成的频率应该比这高很多。
-
使用-e参数:如果构建出现异常,该参数能让Maven打印完整的stack trace,以方便分析错误原因。
-
使用-Dmaven.repo.local参数:如果持续集成服务器有很多任务,每个任务都会使用本地仓库,下载依赖至本地仓库,为了避免这种多线程使用本地仓库可能会引起的冲突,可以使用-Dmaven.repo.local=/home/juven/ci/foo-repo/这样的参数为每个任务分配本地仓库。-D设置参数
-
使用-B参数:该参数表示让Maven使用批处理模式构建项目,能够避免一些需要人工参与交互而造成的挂起状态。
- clean package -U -Dmaven.test.skip=true -Ptesting //maven项目构建的时候打包地址不同,一般有开发环境dev,测试环境test,预览环境preview,生产环境release
- -P的意义参考链接:http://www.cnblogs.com/EasonJim/p/6828743.html(激活配置文件)
- 关于maven的相关知识参考链接:https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_build_profiles.html
综上,持续集成服务器上的集成命令应该为 mvn clean deploy -B -e -U -Dmaven.repo.local=xxx 。此外,定期清理持续集成服务器的本地Maven仓库也是个很好的习惯,这样可以避免浪费磁盘资源,几乎所有的持续集成服务器软件都支持本地的脚本任务,你可以写一行简单的shell或bat脚本,然后配置以天为单位自动清理仓库。需要注意的是,这么做的前提是你有私有Maven仓库,否则每次都从Internet下载所有依赖会是一场噩梦。
使用maven编译,清理,测试,打包,部署项目
1)编译 mvn compile 会生产一个target文件,target下面有一个classes文件夹存放的是我们编译好的类
2)清理 mvn clean 把编译时生产的target文件夹删掉
3)测试 mvn test 生产的target下面有一个classes和test-classes,maven先帮我们编译项目,然后在执行测试代码
4)打包 mvn package target下面多了一个.jar文件
5)部署 mvn install target下面会有一个.jar文件,使用"mvn install"命令,就把maven构建项目的【清理】→【编译】→【测试】→【打包】的这几个过程都做了,同时将打包好的jar包发布到本地的Maven仓库中,所以maven最常用的命令还是"mvn install",这个命令能够做的事情最多
组合命令的使用:
mvn clean compile //先删除在编译
mvn clean package //先删除在打包
mvn clean install //先删除在部署
mvn clean test //先删除在测试