profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

profile可定义的位置和内容

  • 项目的pom.xml文件 (针对特定项目)

    • repositories
    • pluginRepositories
    • properties
  • ~/.m2/settings.xml (针对特定用户)
    • repositories
    • pluginRepositories
    • properties
  • M2_HOME/conf/settings.xml (全局)
    • repositories
    • pluginRepositories
    • dependencies
    • plugins
    • properties
    • dependencyManagement
    • distributionManagement
    • build/defaultGoal
    • build/resources
    • build/testResources
    • build/finalName
    • ......

示例

<profiles>
<profile>
<!-- 本地开发环境 -->
<id>development</id>
<properties>
      <myprop.name>dev</myprop.name>     
    </properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
    <build>
      <filters>
        <filter>dev.properties</filter>
      </filters>
    </build>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<myprop.name>test</myprop.name>   
</properties>
     <build>
      <filters>
        <filter>test.properties</filter>
      </filters>
     </build>
</profile>
<profile>
<!-- 生产环境 -->
<id>production</id>
<properties> 
<myprop.name>product</myprop.name>
</properties>
     <build>
      <filters>
        <filter>product.properties</filter>
      </filters>
    </build>
</profile>
</profiles>

激活activiation

构建时指定激活的profile

mvn clean package -P profile_id      #激活
mvn clean package -P !profile_id #不激活

默认激活

<activation>
  <activeByDefault>true</activeByDefault>
</activation>

jdk版本

<activation>
<jdk>1.6</jdk>
</activation>

可以同时指定多个版本

<jdk>[1.4,1.7)</jdk>  <!--1.4, 1.5, 1.6-->

os

<activation>   
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation> 

属性

<activation>   
<property>
<name>mavenVersion</name>
<value>3.3.2</value>
</property>
</activation> 
  • mvn package -Dprop=value  也能激活
  • 只有<name>没有<value>时,可用任何值激活

文件状态

<activation> 
<file>
<exists>file2.properties</exists>
<missing>file1.properties</missing>
</file>
</activation>

maven的settings.xml中配置激活方式

settings.xml位置可以为${M2_HOME}/conf(全局配置)或~/.m2(当前用户配置)。

<settings>
......
  <activeProfiles>
    <activeProfile>profile_id</activeProfile>
  </activeProfiles>
</settings> 

同时激活的多个profile中相同属性值

根据profile元素定义的先后顺序来进行覆盖取值,而不是activeProfile定义的先后顺序。

查看处于激活状态的profile

mvn help:active-profiles

属性properties

为不同profile定义不同的属性变量或属性值。

<properties>
<prop_name>prop_value</prop_name>   
</properties>

模块modules/module

<modules>
<module>module-name</module>
</modules>

profile激活时才构建指定模块

过滤器build/filters/filter

filter的作用是从该元素指定的配置文件中读取变量。如果资源文件配置中启用了过滤( pom文件的project/build/resources/resource元素中包含<filtering>true</filtering> ),那么资源文件中占位符${...}会用filter读取的对应变量替代。

从配置文件中读取变量

<build>
  <filters>
    <filter>test.properties</filter>
  </filters>
</build>

假设test.properties中内容为

### database connection configuration
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
jdbc.username=aaaa
jdbc.password=bbbb

资源文件的配置

      <resources>
<!--需要过滤的资源文件-->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!--不需要过滤的资源文件-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</testResource>
<testResource>
<directory>src/main/webapp</directory>
<includes>
<include>**/*.xml</include>
</includes>
</testResource>
</testResources>

如果src/main/resources下某个资源文件包含如下内容,其中的占位符会被替换为filter变量值

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
  <value>${jdbc.driverClassName}</value>
</property>
<property name="url">
  <value>${jdbc.url}</value>
</property>
<property name="username">
  <value>${jdbc.username}</value>
</property>
<property name="password">
  <value>${jdbc.password}</value>
</property>
</bean>

参考文档

http://haohaoxuexi.iteye.com/category/269897

Maven Profile的更多相关文章

  1. 项目实现不同环境不同配置文件-maven profile

    最近接触的项目都是在很多地方都落地的项目,需要支持不同的环境使用不同的配置文件.一直以来都以为是人工的去写不同的配置文件,手动的去修改运用的配置文件.感觉自己还是太low呀.maven的使用的还停留在 ...

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

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

  3. 通过maven profile 打包指定环境配置

    背景 最近换了个新公司接手了一个老项目,然后比较坑的是这个公司的项目都没有没有做多环境打包配置,每次发布一个环境都要手动的去修改配置文件.今天正好有空就来配置下. 解决这个问题的方式有很多,我这里挑选 ...

  4. maven profile实现多环境配置

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

  5. 在eclipse激活maven profile配置

    profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同 ...

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

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

  7. maven profile 优先级

    maven profile是有优先级别 也就是说在setting.xml的profile优先级比pom中同名的profile高. 可以使用 mvn help:active-profiles 这个命令是 ...

  8. How to activate maven profile inside eclipse

    How to activate maven profile inside eclipse Normally maven is use for project dependency management ...

  9. 记录一次诡异的Maven Profile不生效的问题

    记录一次诡异的Maven Profile不生效的问题 现象 maven 打包之后,复制的 profile对应的resource文件总是不正确的. 即便是加了 mvn clean package -P ...

  10. maven profile的使用

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

随机推荐

  1. ajax无刷新异步传输

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  2. 最火的.NET开源项目

    综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security).日志(Logging).数据访问(Data Access).配置管理( ...

  3. spring.net tx:advice 和 aop:config 配置事务 匹配名字的方法管理事务

    在网上找到的都是java里的配置方式,后来认真读了下spring.net的帮助文档,解决了这个问题:现在把我的server层的配置文件copy出来: <?xml version="1. ...

  4. 线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations

    题目传送门 题意:训练指南P207 分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询. #include <bits/stdc++.h> using ...

  5. WPF: 旋转Thumb后,DragDelta移动距离出错的解决

    当Thumb跟随Grid旋转90度后,拖拽控件时会飞掉. <Grid x:Name="gridMain" Width="100" Height=" ...

  6. Eclipse: The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

    Link: http://stackoverflow.com/questions/22756153/the-superclass-javax-servlet-http-httpservlet-was- ...

  7. yum安装高版本mysql(5.5)

    1.导入第三方源webtatic rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm 2.如果已安装低版本的mysql就删除 yum r ...

  8. Ubuntu Gnome 14.04.2 lts 折腾笔记

    unity感觉不爽,于是来折腾gnome3 = = 首先去官网下载ubuntu gnome 14.04.2 lts的包(种子:http://cdimage.ubuntu.com/ubuntu-gnom ...

  9. NOI模拟赛Day3

    终于A题啦鼓掌~开心~ 开考看完题后,觉得第二题很好捏(傻叉上线 搞到十一点准备弃疗了然后突然发现我会做第一题 于是瞎码了码,就去准备饭票了... 好了,停止扯淡(就我一个我妹子每天不说话好难受QAQ ...

  10. OI刷题记录

    从六月一号开始记录啦 6月1日 link-cut-tree BZOJ2631 tree