为了构建的灵活性, 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通过其他方式激活时,默认激活失效。
分享到:
相关推荐
与其他类似Unix的工具一样, awsrm在通过管道将其与其他工具的输出结合时也awsrm了其真正功能,例如用于列出AWS资源的和用于按属性过滤它们的grep 。例如果未设置--profiles和/或--regions标志,则awsls将遵循通常...
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上...
期间也可以自定义需要筛选的文件,有“包括”和“例外”两种过滤方式,定义需要过滤的文件类型,这就看个人需要了。 此外就是比较不同文件夹中的文件是否相同的功能,不过这个功能比较适合同步之前使用,比较的结果...
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 高速缓存...
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 ...
提高了面板的打开速度,例如“属性”和“视图配置”面板。 26036 修改了引脚映射器中的数据列排序,以匹配网络名称和引脚编号顺序。 26554 修复了按组件容差排序后,Explorer面板中显示错误组件参数的问题。 26927 ...
实验9:显示表的部分行和部分列,使用where子句过滤出想要的行 18 实验10:使用like查询近似的值 18 实验11:使用order by子句来进行排序操作 20 实验12:操作字符串的函数 22 实验13:操作数字的函数 25 实验14:...
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. 除去访问...
禁止盗用上传相同资源, 太大,本书分两部分,高清版 本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程...
第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一...
下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX的用户来说,使他们熟悉 UNIX 操作环境,通往"骨灰级"高手境界的一大捷径。最重 要的是,Linux 上有公认的 C 语言世界最好的...