zoukankan      html  css  js  c++  java
  • maven profile实现多环境打包

    快速解决:

    项目目录

     

    1.pom文件中添加profile

    <profiles>
    <profile>
    <!-- 本地开发环境 -->
    <id>dev</id>
    <properties>
    <profiles.active>dev</profiles.active>
    </properties>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    </profile>
    <profile>
    <!-- 测试环境 -->
    <id>test</id>
    <properties>
    <profiles.active>test</profiles.active>
    </properties>

    </profile>
    <profile>
    <!-- 生产环境 -->
    <id>prod</id>
    <properties>
    <profiles.active>prod</profiles.active>
    </properties>
    </profile>
    </profiles> 

    2. pom中指定 filter文件夹 和 maven-war-plugin指定替换文件夹

     <build>
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>spring-content.xml</include>
    </includes>
    <filtering>true</filtering>
    </resource>
    </resources>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
    <archiveClasses>true</archiveClasses>
    <warName>${project.artifactId}</warName>
    <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
    <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>
    <webappDirectory>${project.build.directory}/${project.artifactId}
    </webappDirectory>
    <webResources>
    <resource>
    <!-- 由于我是把配置文件都在/WEB-INF/config/文件夹-->
    <!-- 所以把src/main/resources 被filter替换的文件替换dao WEB-INF/config/下-->
    <directory>src/main/resources</directory>
    <targetPath>WEB-INF/config</targetPath>
    <filtering>true</filtering>
    </resource>
    </webResources>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.3.0.M2</version>
    <configuration>
    <scanIntervalSeconds>6</scanIntervalSeconds>
    <httpConnector>
    <port>5004</port>
    </httpConnector>
    <webAppConfig>
    <contextPath>/xxxx</contextPath>
    <!--<defaultsDescriptor>${basedir}/src/main/resources/webdefault.xml</defaultsDescriptor>-->
    </webAppConfig>
    </configuration>
    </plugin>
    </plugins>
    </build>

     3. 对比 WEB-INF/config下aplicationContent.xml(将被后面替换)和 src/main/resources 下aplicationContent.xml

    <bean id="configProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
    <list>
    <value>/WEB-INF/config/application_dev.properties</value>
    </list>
    </property>
    </bean>

     VS

    <bean id="configProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
    <list>
    <!--${profiles.active} 此处占位符 会被mvn替换从pom中profile.active的环境变量
    第三步中 maven-war-plugin配置替换文件 完成多环境切换-->
    <value>/WEB-INF/config/application_${profiles.active}.properties</value>
    </list>
    </property>
    </bean>

     4.maven 编译打包  mvn  clean package  -Dmaven.test.skip=true -Ptest 

     指定-Dmaven.test.skip=true表示跳过测试   -Ptest 激活Profile id=test的环境参数 

    实现效果

     

    config下 原本application_dev.properties 编译完成 替换为application_test.properties

    从而实现了加载多环境配置. 

    概念简介 

    构建项目时可能会遇到在测试(如单元测试)、开发、模拟、生产等不同环境下需要不同配置.
    如果需要修改的项目很多而且复杂的话,则应该使用 Apache Maven 的 Profile 和 Filtering 功能来解决。

    Filtering 功能

    Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。

    Profile 功能

    Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。接着上一个例子,如果我们需要为开发环境和生产环境定义不同的 user.name 属性值,则我们在项目目录里创建两个属性文件:

    profile-development.properties,内容

    user.name=foobar

    profile-production.properties,内容

    user.name=tom

    然后在项目文件(pom.xml)里增加 profile 段,如下:

    <build>
    <filters>
    <filter>src/main/filters/filter-${env}.properties</filter>
    </filters>
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    </resource>
    </resources>
    </build>
    <profiles>
    <profile>
    <id>develop</id>
    <properties>
    <env>develop</env>
    </properties>
    </profile>
    <profile>
    <id>test</id>
    <properties>
    <env>test</env>
    </properties>
    </profile>
    <profile>
    <id>product</id>
    <properties>
    <env>product</env>
    </properties>
    </profile>
    </profiles>
    pasting

    在编译项目时,可以使用 -P 参

    数指定需要使用的 profile 的 id,比如下面命令将会使用 development profile:

    $mvn clean compile -Pdevelopment

    如果想使用 production profile 则执行如下命令:

    $mvn clean compile -Pproduction

    假如不指定 -P 参数的话,则会使用 activeByDefault=true 的一项(即 development)。

    至此,通过 filtering 和 profile 功能实现了为开发环境和生产环境使用不同配置值的目的。当然 profile 还可以允许你添加更多的定义,比如为某一个 profile 添加不同的资源文件。在一些大中型项目里,不同的环境可能仅仅修改配置值并不足够,可能还需要某个配置文件整个替换,那么就应该在 profiles/profile/build/resources 段里指定了。详细的可以参阅附录链接。

    http://archboy.org/2012/05/21/apache-maven-profile-filtering-multiple-build-environments/

    http://www.kafeitu.me/solution/2013/06/29/a-successful-cofiguration-file-management-solution.html
  • 相关阅读:
    Markdown高级使用之流程图
    Sentinel滑动窗口算法
    Markdown基础使用
    多线程学习(二)--整体简介
    MYSQL学习(三) --索引详解
    MYSQL学习(二) --MYSQL框架
    MYSQL 学习(一)--启蒙篇《MYSQL必知必会》
    数据结构学习(六) --排序
    数据结构学习(五)--查找
    数据结构学习(四)--图
  • 原文地址:https://www.cnblogs.com/xmanblue/p/5359912.html
Copyright © 2011-2022 走看看