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. http://blog.csdn.net/u010246789/article/details/52539576

    http://blog.csdn.net/u010246789/article/details/52539576

  2. 在 Chrome 中调试 Android 浏览器

    最近需要使用 Chrome Developer Tools 调试 Android 浏览器,但是官方指南并不是很好使,经过一番折腾,终于调试成功了,在此把经验分享给需要的朋友. Chrome Devel ...

  3. 读书笔记和sprint总结

    第八章  需求分析 主要是讲需求的分析,对于一个程序项目来说,我觉得,需求是这个项目的向导,他可以决定程序项目会发展成什么样子.书里面需求这里大致分为两个:软件需求和用户需求. 软件需求:我们不仅仅要 ...

  4. static方法中为什么使用的都是静态变量

    static方法中需要使用静态变量.假设其他类要使用该方法,该方法里面所使用的变量是非静态的,如果该方法所在的类没有实例化,会导致该方法里面的变量不能实例化,自然该static 方法不能使用

  5. c# 基本值类型及其默认值

    //值类型 C# 类型      .NET Framework 类型 bool            System.Boolean 4Byte 32bit布尔型变量 逻辑值,true或者false,默 ...

  6. WPF 颜色转换

    从字符串到画刷: var converter = new System.Windows.Media.BrushConverter(); var brush = (Brush)converter.Con ...

  7. Java 文件和byte数组转换

    /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...

  8. ACM: Hotel 解题报告 - 线段树-区间合并

    Hotel Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description The ...

  9. 浅谈 LCA

    LCA问题 一.概述: 在图论与计算科学中,两个节点 v 与 w 在有向无环图( directed acyclic graph , DAG )或树中的最近公共祖先(Lowest common ancc ...

  10. 【noiOJ】p8210

    10:河中跳房子 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石.这项激动人心 ...