`

09 属性、资源过滤和profile

阅读更多

为了构建的灵活性, Maven支持属性、资源过滤和Profile。

 

一、属性
1.属性的引用
属性的引用很简单,如:${属性名}


2.属性的分类
(1)内置属性:
常用的内置属性有:
${basedir} 表示项目根目录
${version} 表示项目版本


(2)POM属性
用户可使用该类属性引用POM文件中的对应元素的值。如:${project.artifacctId}就对应了<project><artifactId>元素的值。

(3)自定义属性
用户可在<properties>元素下自定义Maven属性,如:

 

 

<project>
	...
	<properties>
		<my.prop>hello</my.prop>
	</properties>
	...
</project>

 

(4)Settings属性:
与POM属性类似,用户可使用settings开头的属性引用settings.xml中XML元素的值。如${settings.localRepository}


(5)Java系统属性:
所有Java系统属性都可使用Maven属性来引用,例如${user.home}指向用户目录。可使用mvn help:system 查看所有的Java系统属性。


(6)环境变量属性:
所有环境变量都可使用env开头的Maven属性引用。如:${env.JAVA_HOME}表示JAVA_HOME环境变量的值。用户可使用mvn help:system查看所有的环境变量 。

 

 

二、资源过滤
1.资源过滤
  不同的环境中需要的构件可能会有区别,如开发环境、测试环境以及正式环境的数据库配置不同。Maven推荐针对不同的环境生成不同的构件。
为了对应环境的变化,首先要使用Maven属性将这些将会发生变化的部分提取出来。如数据库配置可写成:

database.jdbc.driver = ${db.driver}
database.jdbc.url=${db.url}
database.jdbc.username = ${db.username}
database.jdbc.passwrd = ${db.password}

 


  这里用到了四个Maven自定义属性。我们可在profile元素中定义这些属性。详见下节。

  默认情况下,Maven只会解析POM.XML中的属性引用。也就是说如果上面的数据库配置放在resources目录下,Maven默认不会解析。
  资源文件的处理实际是maven-resources-plugin负责,它的默认行为只是将项目主资源文件复制到主代码编译输出目录中,将测试资源文件复制到测试代码编译输出目录。可通过配置,使该插件解析资源文件中的Maven属性,即开启资源过滤,如:

<project>
	...
	<build>
		<resources>
			<resource>
				<directory>src/main</directory>
				<filtering>true</filtering>
			</resource>
			<resource>
				<directory>src/main/sql</directory>
				<filtering>false</filtering>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>...</directory>
				<filtering>...</filtering>
			</testResource>
		</testResources>
	</build>
	...
</project>

 

  在运行时指定激活的Profile,即可使用指定的属性引用。如:mvn clean install -Pdev

 

2.web资源过滤
  在web项目中有两类资源,一类是构建后放置到WEB-INF/classes目录下,另一类则放到war包的根目录,如css文件。第二类资源由maven-war-plugin插件控制。可以配置方式不同,如:

 

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugins</artifactId>
	<version>2.1-beta-1</version>
	<configuration>
		<webResources>
			<resource>
				<filtering>true</filtering>
				<directory>src/main/webapp</directory>
				<includes>
					<include>* */*.css</include>
					<include>* */*.js</include>
				</includes>
			</resource>
		</webResources>
	</configuration>
</plugin>

 

 

三、Profile
  不同的环境需要的配置可能不相同,为了让构建适合各种不同的环境,Maven引入了Profile概念。


1.定义profile
  可在pom.xml、用户settings.xml、全局settings.xml,profiles.xml(Maven3不支持)中定义profile。如:

<project>
	...
	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<db.driver>...</db.driver>
				<db.url>...</db.url>
				<db.username>...</db.username>
				<db.password>...</db.password>
			</properties>
		</profile>
		<profile>
			<id>test</id>
			<properties>
				<db.driver>...</db.driver>
				<db.url>...</db.url>
				<db.username>...</db.username>
				<db.password>...</db.password>
			</properties>
		</profile>
	</profiles>
	...
</project>

 

 

2.激活profile
(1)命令行激活
  使用-P参数,可同时激活多个profile。如:mvn clean install -Pdev-x,dev-y

 

(2)settings文件显示激活
  如果用户希望某个profile一直处于激活状态,可在settings.xml中使用activeProfiles元素,表示其配置的profile对于所有项目都处于激活状态,如:

<settings>
	...
		<activeProfiles>
			<activeProfile>
				dev-x
			</activeProfile>
		</activeProfiles>
	...
</settings>

 

 

(3)系统属性激活
  用户可以配置当某个系统属性存在时,自动激活profile,如:

	<activation>
		<property>
			<name>test</name>
		</property>
	</activation>
	<id>dev</id>
	<properties>
		<db.driver>...</db.driver>
		<db.url>...</db.url>
		<db.username>...</db.username>
		<db.password>...</db.password>
	</properties>
</profile>

 

 

  也可以配置成当某个系统属性存在,并且为指定值时,自动激活profile。如:

<profile>
	<activation>
		<property>
			<name>test</name>
			<value>x</value>
		</property>
	</activation>
	<id>dev</id>
	<properties>
		<db.driver>...</db.driver>
		<db.url>...</db.url>
		<db.username>...</db.username>
		<db.password>...</db.password>
	</properties>
</profile>

 

 

  系统属性可在命令行中指定,如:mvn clean install -Dtest=x

 

(4)操作系统环境激活
  profile可根据操作系统环境自动激活。如:

<profile>
	<activation>
		<os>
			<name>Windows XP</name>
			<family>Windows</family>
			<arch>x86</arch>
			<version>5.1.2600</version>
		</os>
	</activation>
	<id>dev</id>
	<properties>
		<db.driver>...</db.driver>
		<db.url>...</db.url>
		<db.username>...</db.username>
		<db.password>...</db.password>
	</properties>
</profile>

 

 

(5)根据文件存在与否激活
  可根据项目中是否存在某个文件来激活profile,如:

<activation>
	<file>
		<missing>x.properties</missing>
		<exists>y.properties</exists>
	</file>
</activation>

 

 

(6)默认激活
  可在定义profile时指定为默认激活,如:

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

 

  注意:但有profile通过其他方式激活时,默认激活失效。

分享到:
评论

相关推荐

    awsrm:AWS资源的删除命令

    与其他类似Unix的工具一样, awsrm在通过管道将其与其他工具的输出结合时也awsrm了其真正功能,例如用于列出AWS资源的和用于按属性过滤它们的grep 。例如果未设置--profiles和/或--regions标志,则awsls将遵循通常...

    Maven权威指南 很精典的学习教程,比ANT更好用

    2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或OpenBSD上...

    免费开源的文件夹比较和同步软件 FreeFileSync 11.10 中文免费版.zip

    期间也可以自定义需要筛选的文件,有“包括”和“例外”两种过滤方式,定义需要过滤的文件类型,这就看个人需要了。 此外就是比较不同文件夹中的文件是否相同的功能,不过这个功能比较适合同步之前使用,比较的结果...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    8.4.4 使用Master页面中的控件和属性 237 8.5 在Master页面中指定默认内容 244 8.6 编程指定Master页面 246 8.7 Master页面的嵌套 246 8.8 容器特定的Master页面 249 8.9 事件的触发顺序 251 8.10 高速缓存...

    ASP.NET2.0高级编程(第4版)1/6

    22.1.5 文件和目录的属性、  特性和访问控制列表757 22.2 读写文件764 22.2.1 流764 22.2.2 Reader和Writer769 22.2.3 压缩流773 22.3 处理串行端口779 22.4 网络通信779 22.4.1 WebRequest和  WebResponse779 ...

    Altium Designer Beta 19.0.10完整版安装包+安装教程+和谐文件

    提高了面板的打开速度,例如“属性”和“视图配置”面板。 26036 修改了引脚映射器中的数据列排序,以匹配网络名称和引脚编号顺序。 26554 修复了按组件容差排序后,Explorer面板中显示错误组件参数的问题。 26927 ...

    Oracle数据库实验操作

    实验9:显示表的部分行和部分列,使用where子句过滤出想要的行 18 实验10:使用like查询近似的值 18 实验11:使用order by子句来进行排序操作 20 实验12:操作字符串的函数 22 实验13:操作数字的函数 25 实验14:...

    ZendFramework中文文档

    2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问控制 2.1.6. 查询 ACL 2.2. 精细的访问控制 2.2.1. 精细的访问控制 2.2.2. 除去访问...

    linux与unix shell编程指南part2

    禁止盗用上传相同资源, 太大,本书分两部分,高清版 本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程...

    Linux_unix_shell第一部分编程(共两部分)

    第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一...

    Linux操作系统基础教程

    下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX的用户来说,使他们熟悉 UNIX 操作环境,通往"骨灰级"高手境界的一大捷径。最重 要的是,Linux 上有公认的 C 语言世界最好的...

Global site tag (gtag.js) - Google Analytics