Maven pom.xml 元素配置说明(一)

部分来源:

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fedora linux搜狗输入法,在Fedora 28系统下安装搜狗输入法

以下介绍在Fedora 28系统下安装搜狗输入法&#xff0c;也适用在Fedora 27下的安装&#xff0c;亲测可以。先声明一下&#xff0c;在Fedora 27及以后版本中出现的输入框候选词界面变形但不影响使用。第一步&#xff1a;安装fzug软件源具体方法如下&#xff1a;1.添加 FZUG 源Fed…

ArcEngine中使用上下左右键移动地图

转自愿文ArcEngine中使用上下左右键移动地图 因项目需要&#xff0c;需对mapcontrol控件响应上下左右键&#xff0c;从网上找的方法都一样&#xff0c;都值提到了需要设置axMapControl1的KeyIntercept属性为1&#xff0c;但这样做的结果是&#xff0c;除了自己在onkeydown中设…

linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...

1、首先给服务器装上idrac模块&#xff0c;然后给idrac配置一个远程IP&#xff0c;用作管理2、在web界面输入IP&#xff0c;弹出以下界面&#xff0c;输入账号密码登录3、认证成功后&#xff0c;点击虚拟控制台启动4、进入如下界面&#xff0c;点击菜单栏的《虚拟介质》&#x…

DroidPlugin插件化开发

360手机助手使用的 DroidPlugin&#xff0c;它是360手机助手团队在Android系统上实现了一种插件机制。它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构&#xff0c;实现多团队协作开发具有一定的好处。 它是一种新的插件机制&#xff0c;一种免安装的运行…

io wait linux,另辟蹊径-诊断工具之 IO wait

导读最近在做日志的实时同步&#xff0c;上线之前是做过单份线上日志压力测试的&#xff0c;消息队列和客户端、本机都没问题&#xff0c;但是没想到上了第二份日志之后&#xff0c;问题来了&#xff1a;1、问题&#xff1a;集群中的某台机器 top 看到负载巨高&#xff0c;集群…

Oracle第二天

Oracle第二天 整体安排&#xff08;3天&#xff09; 第一天&#xff1a;Oracle的安装配置&#xff08;服务端和客户端&#xff09;&#xff0c;SQL增强&#xff08;单表查询&#xff09;。 第二天&#xff1a;SQL增强&#xff08;多表查询、子查询、伪列-分页&#xff09;&…

linux搭建虚拟化平台报告,部署KVM虚拟化平台------搭建(示例代码)

一 、部署KVM虚拟化平台hyper-v是windows中的虚拟化1、KVM模块直接整合在Linux内核中&#xff0c;kvm是内核模块&#xff0c;虚拟机与kvm模块之间为管理工具2、KVM组成1.KVM Driver---虚拟机创建---虚拟机内存分配---虚拟CPU寄存器读写---虚拟CPU运行2.QEMU (经过简化与修改)--…

linux 选择文件指定的行数据类型,06练习题

1.如何删除一个非空子目录/tmp&#xff1f; BA. del /tmp/*B. rm -rf /tmpC. rm -Ra /tmp/*D. rm -rf /tmp/*2.存放linux默认系统日志文件是 BA./var/log/dmesg #系统启动时日志B./var/log/messages #系统日志C./var/log/secure #登录相关 安全3.用命令ls -l显示出来文件txt的描…

C#多线程编程

C#多线程编程 一、使用线程的理由 1、可以使用线程将代码同其他代码隔离&#xff0c;提高应用程序的可靠性。 2、可以使用线程来简化编码。 3、可以使用线程来实现并发执行。 二、基本知识 1、进程与线程&#xff1a;进程作为操作系统执行程序的基本单位&#xff0c;拥有应用程…

linux apache24 使用,科学网—linux_centos第24_2次课Apache的安装 - 郭会强的博文

第24次课Apache的安装下载apache的网址[rootghq~]# cd /usr/local/src[rootghqsrc]# lsmysql-5.1.40-linux-i686-icc-glibc23.tar.gz从网上下载&#xff0c;使用命令wget[rootghq src]# wgethttp://apache.fayea.com//httpd/httpd-2.2.31.tar.bz2--2015-08-2007:24:43-- http:/…

《DSP using MATLAB 》示例Example6.3

代码&#xff1a; C0 0; B1 [2 4; 3 1]; A1 [1 1 0.9; 1 0.4 -0.4]; B2 [0.5 0.7; 1.5 2.5; 0.8 1]; A2 [1 -1 0.8; 1 0.5 0.5; 1 0 -0.5]; [b1, a1] par2dir(C0, B1, A1)[b2, a2] par2dir(C0, B2, A2)b conv(b1, b2) % Overall direct form numerator a conv(a1…

简单说明c语言程序步骤,C语言的入门简介和三个简单的C语言程序详细说明

学习一种编程语言&#xff0c;最重要的是建立一个练习环境&#xff0c;边学边练才能学好。Keil软件是目前最流行开发80C51系列单片机的软件&#xff0c;Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案&#xff0c;通过一个集成…

java入门,学习笔记

编译 通过javac编译java程序&#xff0c;会编译出一个后缀为class的文件&#xff0c;我们再通过java虚拟机&#xff08;jvm&#xff09;执行编译后的java程序。 在java中始终有一个main函数&#xff0c;它作为程序的入口&#xff0c;程序从这个入口开始执行一直到结束。 public…

C语言 第五章 选择结构 答案,c语言第五章 选择结构程序设计(习题册答案).doc

第五章 选择结构程序设计基础练习(A)一、填空题1、关系表达式的运算结果是 逻辑 值。C语言没有逻辑型数据&#xff0c;以 1 代表“真”&#xff0c;以 0代表“假”。2、逻辑运算符&#xff01;是 单目 运算符&#xff0c;其结合性是由 右结合性 。3、C语言提供的三种逻辑运算符…

linux命令之ifconfig详细解释

依赖于ifconfig命令中使用一些选项属性&#xff0c;ifconfig工具不仅可以被用来简单地获取网络接口配置信息&#xff0c;还可以修改这些配置。 1&#xff0e;命令格式&#xff1a; ifconfig [网络设备] [参数] 2&#xff0e;命令功能&#xff1a; ifconfig 命令用来查看和配置网…

c语言 如何连接两个程序,C语言连接两个链表程序

创建两个链表&#xff0c;并这两链表连接起来成为一个链表的示例程序&#xff0c;将以下代码保存到一个源文件中&#xff1a;combine_linked_list.c&#xff0c; 如下所示 –#include #include struct node { int data; struct node *next; }; struct node *even NULL; struct…

微信小程序UI组件、开发框架、实用库...

UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库Wa-UI ★122 - 针对微信小程序整合的一套UI库wx-charts ★105 - 微信小程序图表工具wemark ★85 - 微信小程序Markdown渲染库WeZRender ★36 - 微信小程序Canvas增强组件wetoast ★21 - 仿照微信小程序提供的showT…

c语言编程一个 图书管理,我也要用c语言编程一个图书管理系统,

#includeusing namespace std;const int N 25;//定义20本图书struct Book {char name[25];char author[15];char price[7];char publisher[20];char isbn[20];};int ii 19;Book book[N] { { "红与黑","司汤达","26.00","长江文艺出版社&…

十二个球称三次C语言编程,十二个球,有一个不知轻重,现有一个天平,称三次,找出此球!...

平均分成A、B、C三组,每组4个&#xff1b;第一秤&#xff1a;A、B两组先分别放天平左右&#xff1a;情况一&#xff1a;平衡.则问题出在C组,A、B组共8个为标准球. 第二秤用3个标准球和C组的3个球对比, 如果第二秤平衡,剩下的一个就是问题球,第三秤用标准球和问题球对比,得出问题…

loadrunner controller:实时查看VUser的运行情况

1) 如下图&#xff0c;在Run标签页&#xff0c;点击“Vusers...”打开Vuser窗口&#xff1b; 2) 如下图选中一个Vuser点击按钮可以打开Run-Time Viewer窗口&#xff0c;RTV窗口页面显示的就是该Vuser当前的操作&#xff1b; 3) 如下图所示&#xff0c;…