前言

在很多情况下,我们希望项目在不同的阶段有不同的构建,开发的时候,使用开发的环境配置,测试的时候,使用测试的环境配置,上线的时候使用其他的配置,虽然说,每次切换项目运行的环境的时候,我们可以手动更改配置,但这样难免有疏漏之处,导致项目构建的失败。这个时候,我们就需要Maven进行灵活的构建,使用属性、profile和资源过滤三个特性达到根据不同的环境构建项目的目的。

一、Maven 属性

最常见的用法–自定义的Maven属性

使用properties自定义属性,,然后使用${}引用上满定义的属性

<-定义属性--->
<properties><oneVirsion>xxxxx</oneVirsion>
</properties><!--使用属性-->
<dependencyManagement><dependency><groupId>...</groupId><artifactId>...</artifactId><version>${oneVirsion}</version></dependency>
</dependencyManagement>

maven内置的属性

主要有两个内置属性

  • ${basedir} 表示项目的根目录,即包含pom.xml的目录
  • ${version} 表示项目的版本

POM属性

用户可以使用引用POM文件对应元素的值,例如${project.artifacId},对应了< project > < aritfactId >元素的值。
常用属性

       ${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.fianlName}:项目打包输出文件的名称。默认为${project.artifactId}-${project.version}

settings.xml 属性

可以使用sttings. 开头的属性引用settings.xml文件中XML元素的值,例如常用的${settings.localRespository}指向用户本地仓库的地址。

Java系统属性

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

环境变量属性

所有的环境边浪都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME},指代了JAVA_HOME环境变量的值。用户可以使用mvn help:system查看所有的环境变量。

二、资源过滤

上面说了Maven有哪些属性可以使用,但是,只有在pom文件中,$ {xxx}才会被解析,如何在项目的配置文件中(例如日志配置文件、数据库配置文件等)使用${xxx}呢?我们需要配置Maven对含有 ${}属性引用的项目配置文件进行文本替换,具体方式就是,配置资源的过滤。

   <resources><resource><directory>${project.basedir}/src/main/resources</directory><!--开启资源过滤,项目构建时会将当前资源文件中Maven的属性文件替换为配置的文件--><filtering>true</filtering></resource></resources>

这里需要注意以下几点:

  • 超级pom中定义了项目默认的资源文件夹为${project.basedir}/src/main/resources
  • 需要开启资源过滤

下面举个例子:
开启资源过滤

引用Maven属性

查看项目构建后,Maven属性有没有替换

图中显示Maven属性已经被替换。

三、profile

profile允许你定义一个环境,在这个环境中你可以自由定制自己所需的项目构建方式。

下面,结合上面介绍的Maven属性和资源过滤,实现不同环境下,配置文件中的desc被配置成不同的值:
配置自定义属性,并开启资源过滤

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.souche</groupId><artifactId>log-demo</artifactId><version>1.0-SNAPSHOT</version><name>log-demo</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><profiles><!--不同构建环境下,desc配置不同的值--><profile><id>p1</id><properties><desc>profile的id为p1时,啦啦啦啦</desc></properties></profile><profile><id>p2</id><properties><desc>profile的id为p2时,嘟嘟嘟嘟嘟</desc></properties></profile></profiles><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build>
<!--配置资源过滤--><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources></build>
</project>

配置文件中引用profile中自定义的属性。

构建项目,并激活(有多种方式,我们先选命令行激活的方式)不同profile

  • 激活p1
mvn clean package -DskipTests -Pp1

结果

  • 激活p2
mvn clean package -DskipTests -Pp2

结果

3.1、profile配置

Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令行标记告诉Maven运行特定profile中的目标。一个Profiles下面允许出现的元素:

<project><profiles><profile><build><defaultGoal>...</defaultGoal><finalName>...</finalName><resources>...</resources><testResources>...</testResources><plugins>...</plugins></build><reporting>...</reporting><modules>...</modules><dependencies>...</dependencies><dependencyManagement>...</dependencyManagement><distributionManagement>...</distributionManagement><repositories>...</repositories><pluginRepositories>...</pluginRepositories><properties>...</properties></profile></profiles>
</project>

3.2、激活profile

命令行激活

使用-P参数,后面紧跟profile的id来激活profile
例如上面的例子

mvn clean package -DskipTests -Pp2

其他激活方式还有settings文件激活、系统属性激活、操作系统换将激活、默认激活等其他方式

Maven学习之路(五)maven的灵活构建--属性、profile和资源过滤相关推荐

  1. Maven学习总结(八)——使用Maven构建多模块项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

  2. Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(十)--使用Maven编译项目gbk的不可映射问题 一.问题描述 今天在MyEclipse中使用Maven ...

  3. Maven 学习 (0) Maven 简介

    2019独角兽企业重金招聘Python工程师标准>>> Maven 学习 (0) Maven 简介 什么是 Maven? Apache Maven 是一个软件项目的管理和理解工具.M ...

  4. Maven学习(三)————Maven核心概念(二)

    引言 承接上一篇<Maven学习(二)----Maven核心概念(一)>,介绍 Maven  生命周期.插件.目标.继承.聚合等一些概念. 一.Maven 生命周期 1.1 理解 Mave ...

  5. java 设置年轻代堆大小,[JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配...

    [JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配 [JVM学习之路]五.堆(一)堆的内存结构.参数设置.分代思想.内存分配策略及TLAB 一.堆的核心概述 堆的特点: 1.一个jvm实 ...

  6. Matlab_GUI学习笔记(五)——常用对象的属性之Line

    Matlab_GUI学习笔记(五)--常用对象的属性之Line 1. Line 很多属性与之前的Figure与Axes属性差别不大,重点在于Line的核心属性Data. >> get(li ...

  7. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

    maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...

  8. Maven学习(二)————Maven核心概念(一)

    引言 Maven 作为项目构建工具,学习成本并不大,但是如果搞不懂它的一些核心概念,使用起来还是不能特别得心应手. Maven的核心概念包括以下这些: 1.约定的目录结构  2.POM  3.坐标  ...

  9. Maven学习笔记(二) :Maven的安装与配置

    在Windows上安装Maven:  1.  首先检查安装JDK 通过命令行运行命令:echo %JAVA_HOME%和java  -version,能够查看当前java的安装文件夹及java的版本号 ...

  10. Maven学习——安装与修改Maven的本地仓库路径

    一.Maven的下载安装配置 1.1.下载 官网 http://maven.apache.org/download.cgi 1.2.安装配置 apache-maven-3.3.3-bin.zip 解压 ...

最新文章

  1. windows phone 快捷键
  2. jar 命令 打包装class文件的文件夹
  3. css flex布局 padding,CSS3 flex布局之快速实现BorderLayout布局
  4. 数据库优化:52 条 SQL 语句性能优化策略,果断收藏!
  5. jsp页面格式化时间或数字
  6. DIV+CSS 之 网页切图过程中div+css命名规则
  7. jQuery遮罩插件 jquery.blockUI.js
  8. Laravel框架的运行过程
  9. linux 安装触摸版驱动程序,在ubuntu和linux上配置触摸屏驱动程序启用触摸屏
  10. poker2的配置使用
  11. 计算机专业论文要怎么写,计算机专业本科生论文摘要怎么写 计算机专业本科生论文摘要范文参考...
  12. 一阶线性偏微分方程通解法和特征线法(二)| n个自变量情况 | 偏微分方程(八)
  13. 大数据为我们的生活带来了什么?
  14. 高德地图的基础使用(一)显示地图
  15. python中re.match和re.search和re.findall的用法
  16. 笨方法学习Python 习题19 函数和变量 ---学习记录
  17. origin Pro 9.0画多条三维折线图(此处以两条为例)
  18. android连连看课设报告,宠物连连看课程设计报告
  19. 三菱L系列PLC 注释完成 程序完整 有威纶通触摸屏程序
  20. 中国消费电子行业发展现状及趋势分析,市场空间巨大「图」

热门文章

  1. python 存根_python - 内联类型注释与存根会导致不同的mypy行为 - SO中文参考 - www.soinside.com...
  2. 在AI里怎么把一行字拆成单个的字,并且可编辑
  3. vbox虚拟机安装ssh工具远程连接安装docker
  4. snapchat_如何在Snapchat快照中添加背景
  5. [Contrastive Learning] Improving Contrastive Learning by Visualizing Feature Transformation
  6. 神经元示踪染料RH 237的功能和研究意义
  7. 2019牛客多校赛第8场 D Distance 三维树状数组
  8. Java-JPEG图片生成器
  9. word流程图变为图片格式_图片如何转换成word?新手小白几步就学会了
  10. 目录操作 递归打印目录 DIR drent