Maven Profile
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的更多相关文章
- 项目实现不同环境不同配置文件-maven profile
最近接触的项目都是在很多地方都落地的项目,需要支持不同的环境使用不同的配置文件.一直以来都以为是人工的去写不同的配置文件,手动的去修改运用的配置文件.感觉自己还是太low呀.maven的使用的还停留在 ...
- 使用maven profile实现多环境可移植构建(转自CSDN)
使用maven profile实现多环境可移植构建 标签: maven profilemaven自动构建maven自动部署maven可移植构建持续集成 2014-04-25 23:37 26905人阅 ...
- 通过maven profile 打包指定环境配置
背景 最近换了个新公司接手了一个老项目,然后比较坑的是这个公司的项目都没有没有做多环境打包配置,每次发布一个环境都要手动的去修改配置文件.今天正好有空就来配置下. 解决这个问题的方式有很多,我这里挑选 ...
- maven profile实现多环境配置
每次项目部署上线都需要手动去修改配置文件(比如数据库配置,或者一个自定义的配置)然后才能打包,很麻烦,网上找到 maven profile可以完成这个工作,记录如下: 环境:eclipse + spr ...
- 在eclipse激活maven profile配置
profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同 ...
- CAS (13) —— CAS 使用Maven Profile支持多环境编译
CAS (13) -- CAS 使用Maven Profile支持多环境编译 摘要 CAS 使用Maven Profile支持多环境编译 版本 tomcat版本: tomcat-8.0.29 jdk版 ...
- maven profile 优先级
maven profile是有优先级别 也就是说在setting.xml的profile优先级比pom中同名的profile高. 可以使用 mvn help:active-profiles 这个命令是 ...
- How to activate maven profile inside eclipse
How to activate maven profile inside eclipse Normally maven is use for project dependency management ...
- 记录一次诡异的Maven Profile不生效的问题
记录一次诡异的Maven Profile不生效的问题 现象 maven 打包之后,复制的 profile对应的resource文件总是不正确的. 即便是加了 mvn clean package -P ...
- maven profile的使用
作为一名程序员,在开发的过程中,经常需要面对不同的运行环境(开发环境.测试环境.生产环境.内网环境.外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置.日志文件配置.以及一些软件运行 ...
随机推荐
- http://www.roncoo.com/article/detail/124661
http://www.roncoo.com/article/detail/124661
- jQuery Multi-TouchWipe / Multi-TouchZoom
jQuery Multi-TouchWipe / Multi-TouchZoom是小弟参照WipeTouch扩展出来的针对多点触屏划动而改写出来的Jquery插件,可以为dom上的两手指触屏划动拨入( ...
- 来抢你们IT狗的饭碗了
Java,Html,Css,JavaScript,Jsp啥都不会啊 ,等着我!
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法 (2010-05-28 12:54:34) http://blog.sina.com.cn/s/blog_67d41beb0100ixn ...
- ural 1339. Babies
1339. Babies Time limit: 1.0 secondMemory limit: 64 MB O tempora! O mores! Present-day babies progre ...
- 自定义UICollectionViewLayout之瀑布流
目标效果 因为系统给我们提供的 UICollectionViewFlowLayout 布局类不能实现瀑布流的效果,如果我们想实现 瀑布流 的效果,需要自定义一个 UICollectionViewLay ...
- iOS学习01C语言数据类型
1.注释 // 单行注释 // 注释对代码起到解释说明的作用,注释是给程序员看的,不参与程序运行 /* 多行注释 Xcode快捷键 全选 cmd+a 复制 cmd+c 粘贴 cmd+v 设 ...
- ExtJs文件上传(Ext.ux.form.FileUploadField)
Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, { /** * @cfg {String} buttonText The b ...
- Leetcode Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- Codeforces Round #233 (Div. 2) A、Pages
#include <iostream> using namespace std; int main(){ int n,p,k; cin >> n >> p > ...