- 面对不同环境的差异能够灵活的构建项目,
- 操作系统的差异
- 开发环境、测试环境、产品环境的差异(最常用)
- 不同客户的差异
- Maven中灵活的构建:属性、资源过滤、profile
- 14.1Maven属性
- 6类Maven属性
- 内置属性:${basedir}表示项目根目录,及包含pom.xml文件的目录;${version}表示项目的版本
- POM属性:可用于引用pom文件中对应元素的值。
- 重要的pom属性
- 重要的pom属性
- 自定义属性:pom中<properties>下自定义的属性
- Settings属性:可用于引用settings.xml文件中元素的值,以settings.开头。
- 示例:${settings.localRepository}可引用本地仓库的地址
- Java系统属性:可用于引用Java系统属性。可使用mvn help:system查看Java系统属性。
- 环境变量属性:可用于引用环境变量,以env.开头。可使用mvn help:system查看所有环境变量。
- 示例:${env.JAVA_HOME}可引用JAVA_HOME环境变量。
- 6类Maven属性
- 14.2 资源过滤
- 将不同的环境下的配置抽取出来,如数据库配置,依照不同的环境使用不同的配置
- 一般资源文件:
- src/main/resources/目录下,打包后位于WAR包的WEB-INF/classes,即应用程序的classpath中
- web资源文件:
- src/main/webapp目录下,打包后位于WAR包的根目录,及打包后不在应用程序的classpath中
- 一般资源文件和web资源文件默认都不会被过滤,两者的过滤不会相互影响,即:开启一般资源文件过滤不会影响到web资源过滤
- 14.3 profile
-
配置profile
根据不同环境配置profile,并默认激活online<
profiles
>
<
profile
>
<
id
>online</
id
>
<
activation
>
<
activeByDefault
>true</
activeByDefault
>
</
activation
>
<
properties
>
<
resource.path
>src/main/profile/online</
resource.path
>
</
properties
>
</
profile
>
<
profile
>
<
id
>offline</
id
>
<
properties
>
<
resource.path
>src/main/profile/offline</
resource.path
>
</
properties
>
</
profile
>
</
profiles
>
-
资源过滤
<
finalName
>leaf</
finalName
>
<
filters
>
<!-- 定义了变量配置文件的地址 -->
<
filter
>${resource.path}/profile.properties</
filter
>
</
filters
>
<
resources
>
<
resource
>
<
directory
>src/main/resources</
directory
>
<!-- 为true,会将相关文件中${property}的地方,用profile.properties中的变量进行替换 -->
<
filtering
>true</
filtering
>
<
includes
>
<
include
>**/*.xml</
include
>
<
include
>**/*.properties</
include
>
</
includes
>
</
resource
>
<
resource
>
<
directory
>${resource.path}</
directory
>
</
resource
>
</
resources
>
</
build
>
- 使用-P参数激活:mvn clean package -Poffline
-
src/main/profile/offline/profile.properties
db.url=infleaf_inf_leaf_dev
db.username=inf_leaf
#app.key=com.sankuai.inf.leaf.service
app.key=com.sankuai.inf.leaf.service
zk.hosts=10.20.63.112:2181,10.20.62.112:2181,10.20.41.42:2181
-
springContext.xml
//other configurations
<!-- 本机appkey -->
<
bean
id
=
"appKey"
class
=
"java.lang.String"
>
<
constructor-arg
value
=
"${app.key}"
/>
</
bean
>
//other configurations