共计 2054 个字符,预计需要花费 6 分钟才能阅读完成。
maven -U clean compile install -e -X -Dmaven.test.skip=true
在持续集成服务器上使用怎样的 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/ 这样的参数为每个任务分配本地仓库。
使用 - B 参数:该参数表示让 Maven 使用批处理模式构建项目,能够避免一些需要人工参与交互而造成的挂起状态。
综上,持续集成服务器上的集成命令应该为 mvn clean deploy -B -e -U -Dmaven.repo.local=xxx。此外,定期清理持续集成服务器的本地 Maven 仓库也是个很好的习惯,这样可以避免浪费磁盘资源,几乎所有的持续集成服务器软件都支持本地的脚本任务,你可以写一行简单的 shell 或 bat 脚本,然后配置以天为单位自动清理仓库。需要注意的是,这么做的前提是你有私有 Maven 仓库,否则每次都从 Internet 下载所有依赖会是一场噩梦。
项目开发需要有多个环境,一般为开发,测试,预发,正式 4 个环境,通过 maven 可以实现按不同环境进行打包部署,命令为:
mvn package -P dev
其中“dev“为环境的变量 id, 可以自己定义,我定义的名称为:dev,qa,pre,prod , 具体在 pom.xml 中的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
......
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>qa</id>
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>pre</id>
<properties>
<env>pre</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
......
<build>
<filters>
<filter>config/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
......
</build>
</project>
1.profiles 定义了各个环境的变量 id
2.filters 中定义了变量配置文件的地址,其中地址中的环境变量就是上面 profile 中定义的值
3.resources 中是定义哪些目录下的文件会被配置文件中定义的变量替换,一般我们会把项目的配置文件放在 src/main/resources 下,像 db,bean 等,里面用到的变量在打包时就会根据 filter 中的变量配置替换成固定值
参照如下博客 URL:
http://www.cnblogs.com/cfrost…
http://blog.csdn.net/wuxinzai…
文章来源:https://www.jianshu.com/p/7e9…