为了构建的灵活性, 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通过其他方式激活时,默认激活失效。
分享到:
相关推荐
总结来说,通过`@Profile`注解和Maven的资源过滤,我们可以轻松地管理Spring Boot应用在不同环境中的配置。这使得我们能够在开发、测试和生产环境之间切换,而无需对代码进行大量修改,极大地提高了开发效率和部署...
2. **资源过滤**: Maven的资源插件(maven-resources-plugin)支持根据profile进行资源文件的过滤。通过`<build><resources>`节点下的`<filtering>`属性,我们可以指定哪些资源文件需要进行过滤。例如,我们可以为...
内容概要:本文详细介绍了 Maven 的基本原理及其高级特性,包括构建工具的功能、依赖管理、项目信息聚合、坐标系统、生命周期、仓库管理、插件机制、多模块构建、属性配置、资源过滤和构建 profile。通过具体的 XML ...
与其他类似Unix的工具一样, awsrm在通过管道将其与其他工具的输出结合时也awsrm了其真正功能,例如用于列出AWS资源的和用于按属性过滤它们的grep 。例如果未设置--profiles和/或--regions标志,则awsls将遵循通常...
在Laravel框架中,过滤器(Filters)是用于处理HTTP请求和响应的强大工具,它们能够帮助开发者...通过学习这个资源,开发者可以深入了解Laravel过滤器的工作原理,并有效地应用于实际项目,提高代码质量和可维护性。
4. **使用Maven的 filtering 和 filtering-profiles**:结合Profile和资源过滤,可以在不同环境下替换特定的文本内容。例如,替换数据库连接字符串。 5. **使用maven-antrun-plugin**:Maven的AntRun插件允许你在...
在每个profile中,可以定义资源过滤规则,例如,替换`${db.url}`变量,使其在不同环境中指向不同的数据库URL。 4. 配置示例: 在pom.xml中,可以这样定义一个profile: ```xml <profile> <id>dev <env>dev...
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上...
在`<build>`节点中,我们需要配置Maven的资源过滤,以便在打包时选择正确的配置文件: ```xml <!-- 配置文件过滤器 --> <directory>src/main/resources/env <exclude>dev/* <exclude>test/* ...
- **`setValue:forKeyPath:`**:允许通过点语法访问嵌套属性,如`[user setValue:@"Male" forKeyPath:@"profile.gender"]`。 ### KVC的规则与注意事项 1. **自动转换**:KVC尝试将值转换为属性期望的类型,如字符...
期间也可以自定义需要筛选的文件,有“包括”和“例外”两种过滤方式,定义需要过滤的文件类型,这就看个人需要了。 此外就是比较不同文件夹中的文件是否相同的功能,不过这个功能比较适合同步之前使用,比较的结果...
- **计算属性和侦听器**:计算属性用于基于其他数据动态计算结果,而侦听器则可以监听数据变化并作出响应。 - **生命周期钩子**:Vue组件有自己的生命周期,每个阶段都有对应的钩子函数,如`created`、`mounted`、`...
- `top`:实时监控系统资源和进程。 - `kill`和`killall`:发送信号给进程,终止或控制进程。 - `nohup`:让命令在后台运行,即使用户退出也不会停止。 了解并熟练掌握这些日常操作和命令,对于有效管理和使用Unix/...
- **配置病毒过滤**:启用或配置恶意软件检测和清除机制。 - **配置边界流量过滤**:监控并控制进出VSYS的数据流量。 - **配置QoS**:定义服务质量策略,确保关键应用获得足够带宽。 - **启用/禁用CPU资源配额**...
8. **资源处理**:Maven能够处理项目中的静态资源,如复制、过滤和替换文件内容。 9. **自定义构建过程**:虽然Maven提供了一套标准的生命周期,但开发者可以通过自定义生命周期阶段和插件,实现特定的构建需求。 ...
- `/usr`:通用系统资源,如命令、库和文档。 - `/usr/local/bin`:用户安装的程序和工具。 - `~ (Home Directory)`:每个用户的个人工作目录。 **文件属性** 文件有三种类型:普通文件、目录和特殊文件(如符号...
除了基本的图形绘制,Android还支持位图操作,如位图的旋转、缩放、裁剪和颜色过滤。这些操作可以通过Matrix类来实现,Matrix可以对坐标系统进行变换,使得位图能够在Canvas上以各种方式呈现。 在实际应用中,动画...
用户可以列出序列中的注释信息,根据物种属性来过滤序列,创建和管理位置信息,以及定义序列的特征。 BLAST和FASTA分析是序列分析的常用工具,BioJava同样提供了对应的解析器,以便能够解析和提取BLAST和FASTA结果...
同时,ASP.NET的 Membership 和 Profile 功能可以方便地管理和存储用户数据,且支持加密存储。 Web应用程序的安全性也依赖于代码审查和安全编码实践。理解并避免常见的编程陷阱,如不当的异常处理、未检查的输入和...