快速解决:

项目目录

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

maven profile实现多环境打包的更多相关文章

  1. 【转】maven profile实现多环境打包

    作为一名程序员,在开发的过程中,经常需要面对不同的运行环境(开发环境.测试环境.生产环境.内网环境.外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置.日志文件配置.以及一些软件运行 ...

  2. 使用maven profile实现多环境可移植构建(转自CSDN)

    使用maven profile实现多环境可移植构建 标签: maven profilemaven自动构建maven自动部署maven可移植构建持续集成 2014-04-25 23:37 26905人阅 ...

  3. CAS (13) —— CAS 使用Maven Profile支持多环境编译

    CAS (13) -- CAS 使用Maven Profile支持多环境编译 摘要 CAS 使用Maven Profile支持多环境编译 版本 tomcat版本: tomcat-8.0.29 jdk版 ...

  4. maven profile实现多环境配置

    每次项目部署上线都需要手动去修改配置文件(比如数据库配置,或者一个自定义的配置)然后才能打包,很麻烦,网上找到 maven profile可以完成这个工作,记录如下: 环境:eclipse + spr ...

  5. Maven根据不同的环境打包不同的配置

    前言: 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置等等. 那么就需要借助maven提 ...

  6. 使用Maven Profile实现多环境构建

    在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...

  7. 使用maven profile实现多环境可移植构建

    mvn clean package -Pproduction即构建出生产环境需要的war包 mvn tomcat:redeploy -Ptest 即发布到测试环境 在开发过程中,我们的软件会面对不同的 ...

  8. maven 使用-P指定环境打包,linux移动配置文件失败,windows成功!

    问题描述:    windows机器使用-P指定环境打包,最后组装文件组装成功,配置文件成功移动,linux下却只移动了jar包. windows:                  linux:   ...

  9. 使用maven profile实现多环境配置相关打包

    项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,通过maven可以实现按不同环境进行打包部署,命令为: mvn package -P dev 在eclipse中可以右击选项run con ...

随机推荐

  1. VB热点答疑(2016.5.11更新Q4、Q5)

    收录助教君在VB习题课上最常被问到的问题,每周更新,希望对大家有所帮助. Q1.如何让新的文本内容接在原来的内容后面/下一行显示? A1.例如,Label1.text原本的内容是"VB程序设 ...

  2. Linux中的find指令

    find find是最常见和最强大的查找命令,在磁盘中查找文件,用它找到任何你想找的文件,就是速度有点慢. find    path    -option    [    -print ]    [ ...

  3. SHELL脚本自动备份Linux系统

    今天来写一个使用shell脚本增量备份系统文件,顺便复习一下shell脚本相关的命令,这个脚本可以根据自己的需求来备份不同的文件或者文件夹,进行完整备份和增量备份.直接上脚本如下: #!/bin/sh ...

  4. Java发邮件:Java Mail与Apache Mail

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例 ...

  5. [转]NodeJS、NPM安装配置步骤(windows版本)

    1.windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL” ...

  6. yii2源码学习笔记(四)

    继续了解组件Component.php /** * Returns a value indicating whether a property is defined for this componen ...

  7. thinkphp 总结 转

    用ThinkPHP做过几个项目后,感觉这个框架蛮不错的,很适合自己的逻辑习惯,开发起来也快捷,呵呵, 总结了一些项目中常用的东东,希望对初学TP的朋友有所帮助!  1. 模板中不能使用的标签 {$co ...

  8. CMD下查询Mysql中文乱码的解决方法

    我的MySQL是默认utf8编码的,所建数据库也是设置utf8编码,使用程序可以新增中文数据,在cmd中使用SQL语句新增数据则报类似Incorrect string value: '\xB2\xE2 ...

  9. sphinx ---rotate 运行机制

    如果sphinx在运行中,要indexer时,需要加上--rotate参数,这样索引完就直接生效了. 原因是sphinx的searchd在启动时会创建一个 .spl 锁文件,并在关闭时会删除它.在in ...

  10. 百度的一个Ajax跨域方法 JavaScript是没有域的限制

    baidu的通行证处理都是在二级域名passport.baidu.com中处理的,但是baidu很多地方登录都好像是用ajax处理的,他是怎么做的呢?研究了一下,发现一个小技巧. 在http://zh ...