部分来源:

  1. Maven中 dependencies 节点和 dependencyManagement 节点的区别
  2. dependencies与dependencyManagement的区别
  3. maven profile的使用

properties

假如一种场景:比如说spring的jar包版本,由于jar包较多,如果要修改,需要挨个修改,工作量巨大,因此可以使用 <properties>标签,赋值之后,可以统一使用,统一修改。

<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.5</version>
</dependency>

转变为

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.3.5</spring.version>
</properties>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version>
</dependency>

dependencyManagement 与 dependencies

dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

Itoo-base(pom.xml) 继承于 Itoo-base-parent(pom.xml)
示例如下:
Itoo-base-parent(pom.xml)

<dependencyManagement>  <dependencies>  <dependency>  <groupId>org.eclipse.persistence</groupId>  <artifactId>org.eclipse.persistence.jpa</artifactId>  <version>${org.eclipse.persistence.jpa.version}</version>  <scope>provided</scope>  </dependency>  <dependency>  <groupId>javax</groupId>  <artifactId>javaee-api</artifactId>  <version>${javaee-api.version}</version>  </dependency>  </dependencies>
</dependencyManagement>  

Itoo-base(pom.xml)

<!--继承父类-->
<parent>  <artifactId>itoo-base-parent</artifactId>  <groupId>com.tgb</groupId>  <version>0.0.1-SNAPSHOT</version>  <relativePath>../itoo-base-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>itoo-base</artifactId>
<packaging>ejb</packaging>  <!--依赖关系-->
<dependencies>  <dependency>  <groupId>javax</groupId>  <artifactId>javaee-api</artifactId>  </dependency>  <dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId>  </dependency>  <dependency>  <groupId>org.eclipse.persistence</groupId>  <artifactId>org.eclipse.persistence.jpa</artifactId>  <scope>provided</scope>  </dependency>
</dependencies>  

请注意:
子类中没有指明依赖项的版本信息,在顶层 pom 中的 dependencyManagement 中javaee-api表明其优选的版本是 ${javaee-api.version} ,版本信息会注入其中。
只有当 外层的dependencies 元素中没有指明版本信息时, dependencyManagement 中的 dependencies 元素才起作用。

这样做的好处:
统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

顶层 pom 中的 dependencies 与 dependencyManagement 中的 dependencies 元素有一个重要的区别:
dependencyManagement 中的 dependencies 元素只表明依赖项版本的优先选择,并不影响项目的依赖项;而 dependencies 元素则影响项目的依赖项。

Profile

使用maven来实现多环境的构建可移植性,需要借助maven提供的profile功能,通过不同的环境激活不同的profile来达到构建的可移植性。

一、POM中profile的配置
首先是profile配置,在pom.xml中添加如下profile的配置:

<profiles><profile><id>dev</id><properties><profiles.active>dev</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profiles.active>test</profiles.active></properties></profile>
</profiles>

这里定义了三个环境,dev(开发环境)、test(测试环境),其中开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境。

同时每个profile还定义了两个属性,其中profiles.active表示被激活的profile的配置文件的目录。

二、工程目录
针对不同的环境,我们定义不同的配置文件,而这些配置文件都做为资源文件放到maven工程的文件目录下(已将src/main/resources改为config),即config目录下,且各个环境的配置分别放到相应的目录下,而所有环境都公用的配置,直接放到config目录下即可。目录结构如下所示:

src/main/resources  spring.xml  spring-mvc.xml  properties  dev  dev.properties  test  test.properties  

如上所示,开发环境、测试环境的配置文件分别放到config目录下的dev、test三个子目录中,剩余公共的配置文件放于config目录下。
三、POM文件中build配置
在pom中的build节点下,配置资源文件的位置,如下所示:

<resources><resource><directory>config</directory><excludes><exclude>properties/dev/*</exclude><exclude>properties/test/*</exclude></excludes></resource><resource><directory>config/properties/${profiles.active}</directory></resource>
</resources>

首先第一个资源文件位置config需要排队提各个环境的配置文件,各个环境的配置我们在第三个节点中通过前面在profile中配置的profiles.active属性来指定。即config/properties/${profiles.active}。这样在激活指定的profile时,会加载指定目录下的配置文件,如当前激活的是dev profile,那么这个资源目录就是config/properties/dev。这样就达到了不同环境加载不同配置的目的。
四、项目编译生成
所有需要的配置就完成了,通过在运行maven命令时指定不同的profile即可构建不同环境需要的war包或发布到不同的环境了 。如:

mvn clean package -Ptest 即构建出生产环境需要的war包

war包解压后,文件结构如下:

WEB-INFclassesspring.xmlspring-mvc.xmltest.properties

由于默认的profile是dev,所以如果我们不指定profile,那么加载就是开发环境dev下的配置文件了。即我们在本地开发测试时,不用关心profile的问题。

转载于:https://www.cnblogs.com/cuiyf/p/6257346.html

Maven pom.xml 元素配置说明(一)相关推荐

  1. Maven pom.xml 全配置(二)不常用配置

    Maven pom.xml 全配置(二)不常用配置 这里贴出Maven pom.xml文件中使用率较少的配置参数,如果此篇文档中没有找到你想要的参数,移步Maven pom.xml 全配置(一)常用配 ...

  2. Maven pom.xml 全配置(一)常用配置

    Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...

  3. 你真的了解Maven pom.xml 的配置吗?【详解maven pom】

    Maven POM POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖 ...

  4. java配置pom安装依赖包,Maven pom.xml 添加本地jar包依赖以及打包方法

    Maven项目打包时,如果遇到需要添加本地jar包依赖的时候,可以选择两种方法: 1. 安装到本地仓库 第一种方法比较常规,适用于需要添加的jar包也是由maven项目导出,含有pom文件的时候.只需 ...

  5. 在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样...

    [参考]:maven pom.xml加载不同properties配置[转] 首先 看看效果: 点开我们项目中的Maven projects 后,会发现右侧 我们profile有个可勾选选项.默认勾选l ...

  6. Maven pom.xml中的元素modules、parent、properties以及import

    前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...

  7. 二:Maven中pom.xml元素详解

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628201.html  一个pom.xml中包含了许多标签,各个标签是对项目生命周期.依赖管理的配置.常用的主 ...

  8. maven POM.xml 标签详解

    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...

  9. 学习笔记——Maven pom.xml配置详解

    POM的全称是"ProjectObjectModel(项目对象模型)". pom.xml详解 声明规范 <projectxmlns="http://maven.ap ...

最新文章

  1. swing开发图形界面工具配置(可自由拖控件上去)
  2. docker安装mycat_分布式数据库中间件 MyCat 搞起来!
  3. android6.0的坑
  4. gradle项目 构建_使用Gradle构建Monorepo项目
  5. flask mysql分页,Flask分页的实现方法
  6. 【JavaScript】appendChild一个的注意点之会删除原dom树节点
  7. MoCoV3:何恺明团队新作!解决Transformer自监督训练不稳定问题!
  8. 几个提升Go业务开发效率的流行框架和开源库
  9. PyTorch 学习笔记(二):PyTorch的数据增强与数据标准化
  10. 【路径规划】基于matalb遗传算法机器人栅格地图避障路径规划【含Matlab源码 027期】
  11. WinRAR 去除广告弹窗,简单4步亲测有效!
  12. html5交互设计,国外五个交互设计很棒的酷站推荐,酷毙了
  13. 【蓝桥杯备战】 Day02
  14. win8 linux分区工具,Win8分区工具
  15. RabbitMQ基础篇 (一)
  16. 1688搜索店铺列表 API
  17. 理解File's ower 和first respond
  18. 基于神经网络的目标检测论文之目标检测系统:实时路况检测系统的设计与实现
  19. win7打不开chm格式文件
  20. 网管笔记之良好习惯的养成

热门文章

  1. python模拟购物车购物过程_Python 模拟购物车的实例讲解
  2. vue-cli部署ngixs_Vue-cli项目部署到Nginx
  3. 李超线段树 [Heoi2013]Segment
  4. 深度理解 Virtual DOM
  5. Catalan数(数论)
  6. Docker中安装Jenkins实时发布.net core 项目(二)
  7. 华水c语言课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  8. nlinfit函数 matlab,Matlab中拟合函数nlinfit和lsqcurvefit的问题
  9. 批处理 java环境_java环境配置简单批处理方法一键OK
  10. java 文本排序_如何使用Java按最高编号对文本文件进行排序