Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理(属性过滤)
2013-07-03 11:45
495 查看
构建项目时可能会遇到在测试(如单元测试)、开发、模拟、生产等不同环境下需要不同配置(properties、xml)或资源(jpg、png、mp3)的情况。比如常见的数据库连接(即 jdbc url)的值,在不同的环境下可能有如下几种值:
· 测试环境:jdbc:mysql://localhost:3306/foobar_test
· 开发环境:jdbc:mysql://localhost:3306/foobar_dev
· 模拟环境:jdbc:mysql://192.168.1.11:3306/foobar
· 生产环境:jdbc:mysql://192.168.1.10:3306/foobar
或者同样是生产环境,针对(产品)交付给A公司客户的与交付给B公司客户的需要不同配置或者资源,比如产品界面中的公司名称、公司LOGO等。
又或者针对不同的操作系统(如 Windows,Linux)需要为某个配置设定不同的文件路径。
可见,在不同的软件开发生命周期阶段、不同的最终客户(用户)环境、不同的运行平台都有可能需要不同配置或资源的情况。假如各个环境下的差别很小的话,我们可以在项目编译之后手工修改或者写个 shell script 自动修改,但如果需要修改的项目很多而且复杂的话,则应该使用 Apache Maven 的 Profile 和 Filtering 功能来解决。(当然前提是你的项目必须是用 Maven 构建的啦,哈哈,还有测试阶段所使用到的资源文件实际上 Maven 默认已经划分出来,所以并不需要本文所说的方法)
Filtering 功能
Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。
举个例子:
默认的项目资源文件位于 “src/main/resources” 目录,在该目录下创建一个文件 “test.properties”,里面写上一行:
Hello ${user.name}
然后修改项目文件(pom.xml)启用 filtering 功能,如:
<project> ... <build> ... <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> ... </resources> ... </build> ... </project> |
$mvn clean compile -Duser.name=foobar |
我们也可以把 filtering 用到的变量写在项目属性段里,比如:
<project> ... <properties> <user.name>foobar</user.name> <user.email>foobar@some.com</user.email> </properties> ... </project> |
user.name=foobar user.email=foobar@some.com |
<project> ... <build> ... <filters> <filter>project.properties</filter> </filters> ... </build> ... </project> |
Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。接着上一个例子,如果我们需要为开发环境和生产环境定义不同的 user.name 属性值,则我们在项目目录里创建两个属性文件:
profile-development.properties,内容
user.name=foobar |
user.name=tom |
<project> ... <profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <filters> <filter>profile-development.properties</filter> </filters> </build> </profile> <profile> <id>production</id> <build> <filters> <filter>profile-production.properties</filter> </filters> </build> </profile> </profiles> </project> |
$mvn clean compile -Pdevelopment |
$mvn clean compile -Pproduction |
至此,通过 filtering 和 profile 功能实现了为开发环境和生产环境使用不同配置值的目的。当然 profile 还可以允许你添加更多的定义,比如为某一个 profile 添加不同的资源文件。在一些大中型项目里,不同的环境可能仅仅修改配置值并不足够,可能还需要某个配置文件整个替换,那么就应该在 profiles/profile/build/resources 段里指定了。详细的可以参阅附录链接。
相关文章推荐
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理(属性过滤)
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
- Apache Maven 使用 profile 和 filtering 实现多种环境下的资源配置管理
- Maven使用profile 和 filtering实现多种环境下配置打包
- Maven中profile和filtering实现多个环境下的属性过滤
- Maven中profile和filtering实现多个环境下的属性过滤
- [转]Maven中profile和filtering实现多个环境下的属性过滤
- Maven中profile和filtering实现属性过滤
- Maven中使用Profile和filtering进行属性过滤
- (十八)maven实践-使用profile实现多环境可移植构建
- 利用maven的resources、filter和profile实现不同环境使用不同配置文件
- 利用maven的resources、filter和profile实现不同环境使用不同配置文件
- Maven 中使用 filter 和 profile 实现不同环境使用不同的配置
- maven下多环境配置文件、属性管理 & Spring使用@value初始化字段值
- 使用Maven和Spring的profile功能实现不同运行环境的无缝切换
- 使用maven的profile和filter插件管理配置项--不同环境(dev,beta,production)轻松切换
- 使用maven的profile和filter插件管理配置项--不同环境(dev,beta,production)轻松切换
- 利用maven的resources、filter和profile实现不同环境使用不同配置文件(POM中)