• 面对不同环境的差异能够灵活的构建项目,

    • 操作系统的差异
    • 开发环境、测试环境、产品环境的差异(最常用)
    • 不同客户的差异
  • Maven中灵活的构建:属性、资源过滤、profile
  • 14.1Maven属性
    • 6类Maven属性

      • 内置属性:${basedir}表示项目根目录,及包含pom.xml文件的目录;${version}表示项目的版本
      • POM属性:可用于引用pom文件中对应元素的值。
        • 重要的pom属性

      • 自定义属性:pom中<properties>下自定义的属性
      • Settings属性:可用于引用settings.xml文件中元素的值,以settings.开头。
        • 示例:${settings.localRepository}可引用本地仓库的地址
      • Java系统属性:可用于引用Java系统属性。可使用mvn help:system查看Java系统属性。
      • 环境变量属性:可用于引用环境变量,以env.开头。可使用mvn help:system查看所有环境变量。
        • 示例:${env.JAVA_HOME}可引用JAVA_HOME环境变量。
  • 14.2 资源过滤
    • 将不同的环境下的配置抽取出来,如数据库配置,依照不同的环境使用不同的配置
    • 一般资源文件:

      • src/main/resources/目录下,打包后位于WAR包的WEB-INF/classes,即应用程序的classpath中
    • web资源文件:
      • src/main/webapp目录下,打包后位于WAR包的根目录,及打包后不在应用程序的classpath中
    • 一般资源文件和web资源文件默认都不会被过滤,两者的过滤不会相互影响,即:开启一般资源文件过滤不会影响到web资源过滤
  • 14.3 profile
  • 配置profile

    根据不同环境配置profile,并默认激活online
    <profiles>
        <profile>
            <id>online</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <resource.path>src/main/profile/online</resource.path>
            </properties>
        </profile>
        <profile>
            <id>offline</id>
            <properties>
                <resource.path>src/main/profile/offline</resource.path>
            </properties>
        </profile>
    </profiles>
  • 资源过滤

        <finalName>leaf</finalName>
        <filters>
            <!-- 定义了变量配置文件的地址 -->
            <filter>${resource.path}/profile.properties</filter>
        </filters>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- 为true,会将相关文件中${property}的地方,用profile.properties中的变量进行替换 -->
                <filtering>true</filtering>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${resource.path}</directory>
            </resource>
        </resources>
    </build>
  • 使用-P参数激活:mvn clean package -Poffline
  • src/main/profile/offline/profile.properties
    db.url=infleaf_inf_leaf_dev
    db.username=inf_leaf
    #app.key=com.sankuai.inf.leaf.service
    app.key=com.sankuai.inf.leaf.service
    zk.hosts=10.20.63.112:2181,10.20.62.112:2181,10.20.41.42:2181
  • springContext.xml

    //other configurations
    <!-- 本机appkey -->
    <bean id="appKey" class="java.lang.String">
        <constructor-arg value="${app.key}"/>
    </bean>
    //other configurations

《Maven实战》第14章 灵活的构建的更多相关文章

  1. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  2. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

  3. 学习笔记-[Maven实战]-第三章:Maven使用入门(1)

    说明:[Maven实战]一书还介绍了怎么样手工创建Maven工程,学习这本书是为了能尽快在工作中使用,就忽略了手工建工程的部分 如果想了解这部分的内容,可以自己看看书 开始: 1.新建一个maven工 ...

  4. Java并发编程实战 第14章 构建自定义的同步工具

    状态依赖性 定义:只有满足特定的状态才能继续执行某些操作(这些操作依赖于固定的状态,这些状态需要等待别的线程来满足). FutureTask,Semaphroe,BlockingQueue等,都是状态 ...

  5. 《Maven实战》笔记-10-灵活的构建

    一.灵活构建的意义 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就 ...

  6. maven入门(1-4)使用eclipse构建maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  7. 从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp

    P90 .1-从零构建和部署去中心化投票App-01 P91 .2-从零构建和部署去中心化投票App-02 P92 .3-从零构建和部署去中心化投票App-03 参考博文:http://liyuech ...

  8. 学习笔记-[Maven实战]-第三章:Maven使用入门(3)

    这里说一下在建测试工程里遇到的问题 1.第一次建工程,junit依赖始终没有成功,最后删除现在工程,新建了一个工程就好了 2.使用junit4的问题.工程默认的依赖是junit3.8.1,我改成了4. ...

  9. 学习笔记-[Maven实战]-第三章:Maven使用入门(2)

    使用maven执行编译和测试 1.maven执行编译 (1).在pom.xml上点右键,选择Maven build... (2).在Goals里输入clean complie,执行编译 执行结果: [ ...

随机推荐

  1. CGContextRef用法

    本文转载至 http://blog.csdn.net/perfect_promise/article/details/7660220 quartz 是主要的描画接口,支持基于路径的描画. 抗锯齿渲染. ...

  2. cookie的简单留言框

    我们在网页浏览时退出后,再次进入时会有上次的记录,这就用的上cookie属性了,cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先 ...

  3. python中 将字符串和字典的相互转换

    1.首先引入json模块 # 引入json模块 import json 2.转换 #JSON到字典转化: dictinfo = json.loads(json_str) # 输出dict类型 字典到J ...

  4. 解决EF6中表名变成复数的情况

    在用EF6 时,在进行数据调用的时候,总提示数据表名对象错误.. 解决此问题需要在继承DbContext的实体类中 加入: using System; using System.ComponentMo ...

  5. 高性能网站服务器的架设优化-Nginx优化

    一:对于高性能网站 ,请求量大,如何支撑?思路 在网站架构设计中,大家一定对 LNMP (Linux Nginx Mysql Php) 不陌生.LNMP 确实是一个非常优秀的架构,秉承着自由,开放,高 ...

  6. Eclipse 介绍

    设置背景的插件: Darkest Dark Theme 添加 properties 插件: Properties Editor Git 插件: Egit 常用快捷键 command + 1 : 代码提 ...

  7. 《深入理解Linux网络技术内幕》阅读笔记 --- 路由基本概念

    一.路由的基本概念 1.一条路由就是一组参数,这些参数存储了往一个给定目的地转发流量所需的信息,而一条路由所需的最少的参数集合为:(1)目的网络,(2)出口设备,(3)下一跳网关 2.路由中的相关术语 ...

  8. (转)Android工程出现 java.lang.NoClassDefFoundError错误解决方法

    在Eclipse中,导入Android工程,工程没有报错,运行时,出现 java.lang.NoClassDefFoundError类没有找到的错误.从问题上可以看出是导入包出错的原因.遂百度加谷歌. ...

  9. 图形数据库 Neo4j 开发实战【转载】

    简介: Neo4j 是一个高性能的 NoSQL 图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系.很多应用中数据之间的关系,可以很直接地使 ...

  10. tkprof工具详解二

      TKPROF是一个可执行文件,自带在Oracle Server软件中,无需额外的安装. 该工具文件可以用来解析ORACLE的SQL TRACE(10046) 以便生成更可读的内容.  实际上tkp ...