Maven为了支持构建的灵活性,适应开发环境、测试环境和生产环境内置了三大特性,即属性、Profile和资源过滤
1.Maven的属性 <properties>
Maven有6类属性
(1)内置属性:主要有两个常用内置属性
${basedir}:表示项目根目录,即包含pom.xml文件的目录;
${version}:表示项目版本
(2)POM属性:该类属性引用POM文件中对应元素的值,它们中的一些属性的默认值都是定义在超级POM中,常用的POM属性包括:
${project.build.sourceDirectory}:项目的主源码路径,默认为 src/main/java/ ;
${project.build.testSourceDirectory}:项目的测试源码目录,默认为 src/test/java/ ;
${project.build.directory}:项目构建输出目录,默认为 target/ ;
${project.outputDirectory}:主代码编译输出目录,默认为 target/classes/ ;
${project.testOutputDirectory}:测试代码编译输出目录,默认为 target/test-classes/ ;
${project.groupId}:项目的groupId ;
${project.artifactId}:项目的artifactId ;
${project.version}:项目的version,与${version}等价 ;
${project.build.finalName}:项目的打包输出文件名称,默认为${project.artifactId}-${project.version} 。
(3)自定义属性:
<project> <properties> <my.prop>hello</my.prop> </properties> </project>
然后在POM中其它地方使用${my.prop}的时候会被替换成hello
(4)Setting属性:与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查看所有环境变量。
2.资源过滤
(1)Maven属性默认情况下只有在pom.xml文件中才能使用。如果想根据不同的环境自动配置properties文件中也使用Maven的属性(即,将Maven Profile中配置替换到资源中${xxx}上)。首先需要开启资源过滤
开启资源过滤的方法如下(通过maven-resources-plugin实现):
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> </testResource> </testResources> </build>
filtering的值true/false对应开启/关闭
(2)还可以开启web项目的资源过滤,方法如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <webResources> <resource> <filtering>true</filtering> <directory>src/main/webapp</directory> <includes> <include>**/*.css</include> <include>**/*.js</include> </includes> </resource> </webResources> </configuration> </plugin>
(3)自定义基于Maven Profile的属性
为了替换开启资源过滤的目录下进行替换,需要自定义Profile的属性
Profile属性与properties标签定义属性类似,但是需要一个id,定义样式如下:
<project> <profiles> <profile> <id>myId</id> <properties> <my.property>myPropertyValue</my.property> </properties> </profile> </profiles> </project>
(4)运行命令
通过-P参数表示在命令行激活一个profile,可用逗号分隔激活多个运行命令如下:
mvn clean compile -PmyId,myId2
3.Maven Profile
为了能够构建在各个环境下方便移植,Maven引入了profile的概念。
首先需要开启资源过滤
profile能够在构建的时候修改POM的一个子集,或者添加额外的配置元素。注意的一点是,profile在pom.xml中可声明的元素在settings.xml中可声明的元素是不一样的:
profile在pom.xml中可声明的元素
<project> <repositories></repositories> <pluginRepositories></pluginRepositories> <distributionManagement></distributionManagement> <dependencies></dependencies> <dependencyManagement></dependencyManagement> <modules></modules> <properties></properties> <reporting></reporting> <build> <plugins></plugins> <defaultGoal></defaultGoal> <resources></resources> <testResources></testResources> <finalName></finalName> </build> </project>
profile在settings.xml中可声明的元素:
<project> <repositories></repositories> <pluginRepositories></pluginRepositories> <properties></properties> </project>
激活profile
(1)命令行激活
使用mvn命令行参数-P加上profile的id来激活profile,多个id直接以逗号分隔
mvn clean install -Pdevx,devy
(2)settings文件显式激活
如果用户希望某个profile默认一直处于激活状态,就可以配置setting.xml文件的activeProfiles元素,表示配置的profile对于所有项目都是处于激活状态
<settings> ... <activeProfiles> <activeProfile>devx</activeProfile> <activeProfile>devy</activeProfile> </activeProfiles> ... </settings>
(3)系统属性激活,用户可以配置当某系统属性存在或其值等于期望值时激活profile
<profiles> <profile> <activation> <property> <name>actProp</name> <!-- 当存在value时,表示某系统属性存在且其值等于期望值时激活 --> <value>x</value> </property> </activation> </profile> </profiles>
不要忘了,可以在命令行声明系统属性。如:
mvn clean install -DactProp=x
这其实也是一种从命令行激活profile的方法,而且多个profile完全可以使用同一个系统属性来激活。别忘了,系统属性可以通过mvn help:system来查看
(4)操作系统环境激活
<profiles> <profile> <activation> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> </profiles>
这里的family值包括Window、UNIX和Mac等,而其他几项对应系统属性的os.name、os.arch、os.version
(5)文件存在与否激活,Maven能根据项目中某个文件存在与否来决定是否激活profile
<profiles> <profile> <activation> <file> <missing>x.properties</missing> <exists>y.properties</exists> </file> </activation> </profile> </profiles>
(6)默认激活
<!--默认启用的是dev环境配置--> <profile> <id>dev</id> <properties> <env>dev</env> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile>
使用activeByDefault元素用户可以指定profile自动激活。
注意:如果POM中有任何一个profile通过以上其他任意一种方式被激活了,所有的默认激活配置都会失效。
查看当前激活的profile
mvn help:active-profiles
列出当前所有的profile:
mvn help:all-profiles
4.profile的种类
(1)pom.xml:只对当前项目有效
(2)用户setting.xml:本机上该用户所有的Maven项目有效
(3)全局setting.xml:本机上所有用户的Maven项目有效
相关推荐
这个名为“VB ADODB的小程序(代码)八.rar”的压缩包包含了一系列与VB ADODB相关的代码示例,主要涉及以下几个方面: 1. **VB ADODB 二次打开数据库**: 当需要在同一个VB程序中多次访问数据库时,可以使用ADODB...
这种方式能够提高构建的灵活性和可定制性。 - **应用场景**: 当需要根据不同环境(如开发环境、测试环境、生产环境)进行构建时,或者需要根据特定条件(如构建版本、构建时间等)执行不同的构建策略时,参数化构建...
作者努瓦曼·塔西在2020年创建了这个项目,向我们展示了如何结合Vue.js的灵活性和康威生命游戏的趣味性,创造出一个互动的、引人入胜的Web应用。在解压名为“gameoflife-vuejs-master”的压缩包后,我们可以查看到...
在农村供水工程设计图集数据库的构建过程中,还需要注意以下细节与实践经验:对于设计图集的编制,应注重统一性和多样性相结合,既要遵循国家或地方的技术标准和质量要求,又要根据实际情况和特殊条件进行灵活调整和...
市场需求波动,价格压力大..........................................297.4 应对策略:灵活调整生产计划,优化成本控制...........................30第八章 法规政策环境分析.......................................
- **指数ETF**:采用改进的马科维茨模型,结合灵活调仓策略。 - **行业ETF**:通过PCA(主成分分析)去除行业相关性,再应用风险平价模型构建组合。 - **指数增强型基金**:重点考虑沪深300和中证500指数增强基金...
### OpenStack构建企业私有云 ...#### 八、Q&A 对于任何关于OpenStack构建私有云的问题,我们都欢迎游戏运维和研发工程师加入我们,共同探讨和解决问题。如果您有任何疑问或建议,请随时联系我们。
供应链网络构建是指根据企业的战略目标和需求,设计和实施一个高效、灵活、可靠的供应链系统,以满足客户需求,提高竞争力和市场份额。本文档将详细介绍供应链网络构建的基础理论和方法。 一、供应链环境、经营主体...
总的来说,民营建筑企业构建薪酬管理体系需兼顾公平、透明、行业规范和灵活性,通过科学的薪酬设计,既能吸引和留住人才,又能推动企业健康发展。同时,良好的薪酬体系还有助于塑造企业文化,提升员工满意度,从而...
Vue.js 是由尤雨溪创建的轻量级前端框架,以其易学易用、灵活性高和性能优秀等特点受到开发者们的广泛欢迎。Vue采用MVVM(Model-View-ViewModel)架构模式,使开发者能够轻松地处理数据和视图之间的绑定。 二、环境...
### Apache Spark 系列技术直播第八讲:微软 Azure 平台利用 Intel Analytics Zoo 构建 AI 客服支持实践 #### 关于 Intel Analytics Zoo 的介绍 Intel Analytics Zoo 是一个统一的分析与人工智能平台,旨在为...
面对政策环境的变化,企业应灵活应对,如遵循环保法规,适应贸易政策调整,以及及时跟进技术标准。数字化转型是现代企业发展的重要方向,包括数字化生产、数据分析、电商平台建设和工业互联网平台的应用,以提高效率...
第八,软件需要具有维护管理简便功能,能够简便地维护和更新个人数字图书馆。 一些常见的个人知识管理软件包括个人知识王、超级文档管理器、文档资源管理软件—Mybase、个人数字图书馆—清华同方等。 个人知识王是...
针对特定市场群体实施精准营销..............................224.4 定价策略差异化:根据产品价值和市场竞争状况灵活定价..................23第五章 频率分析仪行业企业合作与联盟战略..............................
强调创新精神,营造积极工作氛围......................337.4 激励机制:制定公平的薪酬福利体系,激发员工潜能...............34第八章 风险评估与应对措施.........................................................
它提供了一个灵活的方式来构建 web 应用程序,支持自动配置、生产就绪和高效开发。 SpringBoot 的主要特点包括自动配置、 starters、actuator 等。 二、Vue.js 简介 Vue.js 是一个 Progressive 和 flexible 的 ...
本文将基于《51单片机实时操作系统的构建.pdf》这一资料,详细探讨如何构建一个适用于51单片机的实时操作系统,并重点分析51单片机的基本架构、时钟管理、中断处理、I/O端口配置以及定时器功能等内容。 #### 二、51...
3. **场景应用对接**:根据不同的应用场景需求,提供灵活多样的服务接口和支持。 4. **服务化**:将各项功能和服务模块化,以便于快速响应市场需求变化。 #### 四、阿里云IoT的核心价值与服务 阿里云IoT为智能园区...