zoukankan      html  css  js  c++  java
  • 搬运记录问题-打包发布maven方式和profiles模式配置

    在持续集成服务器上使用怎样的 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中的配置如下:

    html] view plain copy
     print?
    <?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中的变量配置替换成固定值

    搬运地址:https://blog.csdn.net/tlqfreedom/java/article/details/60955757

  • 相关阅读:
    Effective Java 第三版——26. 不要使用原始类型
    Effective Java 第三版——25. 将源文件限制为单个顶级类
    Effective Java 第三版——24. 优先考虑静态成员类
    Effective Java 第三版——23. 优先使用类层次而不是标签类
    Effective Java 第三版——22. 接口仅用来定义类型
    Effective Java 第三版——21. 为后代设计接口
    Effective Java 第三版——20. 接口优于抽象类
    Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
    Effective Java 第三版——18. 组合优于继承
    Effective Java 第三版——17. 最小化可变性
  • 原文地址:https://www.cnblogs.com/meng-ma-blogs/p/13372250.html
Copyright © 2011-2022 走看看