首页 > 技术文章 > 《Maven实战》第14章 灵活的构建

yeyang 2018-05-03 22:50 原文

  • 面对不同环境的差异能够灵活的构建项目,
    • 操作系统的差异
    • 开发环境、测试环境、产品环境的差异(最常用)
    • 不同客户的差异
  • 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

推荐阅读