• maven集成命令-U -B -P -e -X


    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/p/5491291.html

    http://blog.csdn.net/wuxinzaiyu/article/details/8524274

    文章来源:https://www.jianshu.com/p/7e94b7de21a9

  • 相关阅读:
    oracle里的tns是什么意思
    什么是联机分析处理(OLAP)
    JDBC和ODBC
    mysql 乱码
    eclipse常用快捷键和插件
    数仓项目01:准备工作
    github、maven、idea初始化一个项目
    数仓项目02:集群搭建
    数仓项目03:数据采集层(Flume+Kafka)
    Java Swing 日期控件(转载)
  • 原文地址:https://www.cnblogs.com/alterem/p/11387035.html
Copyright © 2020-2023  润新知