Maven中的dependencyManagement
maven 是用来构建项目结构的,是一种主流的项目构建工具,项目中使用到的第三方jar包,用maven来管理是非常方便的,本篇文章主要来讲解<dependencyManagement> 和 <dependencies> 在管理jar包方面的不同之处,对于maven的基础信息和其他的一些方面不再做介绍。
现在的项目基本上都是使用多module来管理的,这就涉及到一个问题,多module之间如何使用共同的第三方jar,或者说如何减少相同的jar导入的配置。
1. 首先介绍<dependencies>
我们是这里引入了一个jar包之后,这里如果没有加上version版本号的话,那么maven就会去<dependencyManagement>里找对应groupId和artifactId的jar,如果有就继承他,如果没有就会报错,这时候其实在我们配置的本地仓库中会真实的下载对应的jar包,这时候所有的子module都会默认继承这里面所有声明的jar
2. <dependencyManagement>
这里其实是起到管理依赖jar版本号的作用,一般只会在项目的最顶层的pom.xml中使用到,所有子module如果想要使用到这里面声明的jar,只需要在子module中添加相应的groupId和artifactId即可,并不需要声明版本号,需要注意的是这里面只是声明一个依赖,并不是真实的下载jar,只有在子module中使用到,才会去下载依赖。
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><druid.version>1.0.1</druid.version><mysql.version>5.1.26</mysql.version><spring.version>4.3.12.RELEASE</spring.version><mybatis.version>3.4.5</mybatis.version><mybatis-spring.version>1.3.0</mybatis-spring.version><pagehelper.version>4.1.6</pagehelper.version><gson.version>2.2.4</gson.version><guava.version>15.0</guava.version><dubbo.version>2.5.3</dubbo.version><zookeeper.version>3.4.8</zookeeper.version><zkclient.version>0.8</zkclient.version><commons-lang.version>2.6</commons-lang.version><shiro.version>1.2.3</shiro.version><freemarker.version>2.3.22</freemarker.version><commons-beanutils.version>1.9.2</commons-beanutils.version><junit.version>4.12</junit.version><mockito.version>1.10.19</mockito.version><commons-collections4.version>4.1</commons-collections4.version><httpclient.version>4.5.5</httpclient.version><fastjson.version>1.2.37</fastjson.version><jedis.version>2.9.0</jedis.version><redis.version>1.8.8.RELEASE</redis.version><jdk.version>1.8</jdk.version><commons-logging.version>1.1</commons-logging.version><log4j.version>1.2.17</log4j.version><javax.servlet.version>2.5</javax.servlet.version><activemq-core.version>5.7.0</activemq-core.version><activemq-pool.version>5.12.1</activemq-pool.version><spring.jms.version>5.0.6.RELEASE</spring.jms.version><aspectj.version>1.8.0</aspectj.version><jms.version>2.0.1</jms.version><cglig.version>3.2.4</cglig.version><!-- 设置默认编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><center.project.name>${project.artifactId}</center.project.name><profiles.dir>src/profiles</profiles.dir>
</properties>
<dependencyManagement><dependencies><!-- Aspectj --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>${cglig.version}</version></dependency><!-- activemq --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>${activemq-core.version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>${activemq-pool.version}</version></dependency><dependency><groupId>javax.jms</groupId><artifactId>javax.jms-api</artifactId><version>${jms.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.jms.version}</version></dependency><!-- activemq --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>${javax.servlet.version}</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>${commons-logging.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><!-- spring --><!-- db --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- db --><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${pagehelper.version}</version></dependency><!-- mybatis --><!-- apache --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons-lang.version}</version></dependency><!-- apache --><!-- commons-beanutils --><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>${commons-beanutils.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><!-- commons-beanutils --><!-- dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion><exclusion><artifactId>netty</artifactId><groupId>org.jboss.netty</groupId></exclusion></exclusions></dependency><!-- dubbo --><!-- zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>${zookeeper.version}</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>${zkclient.version}</version></dependency><!-- zookeeper --><!-- jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>${jedis.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${redis.version}</version></dependency><!-- test start --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>${mockito.version}</version><scope>test</scope></dependency><!-- test end --><!-- google --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>${gson.version}</version></dependency><!-- fastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>${guava.version}</version></dependency><!-- google --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>${commons-collections4.version}</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency></dependencies>
</dependencyManagement>
<dependencies><!-- Aspectj --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj.version}</version></dependency>
</dependencies>
关于去除某个dependency中某个依赖项
可以使用如下的方式
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>
Dependency Scope认识
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。让我们详细看一下每一种范围:
compile (编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。
provided (已提供范围)
provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
runtime (运行时范围)
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC
驱动实现。
test (测试范围)
test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
system (系统范围)
system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)
maven中使用scope= import
在Spring boot 项目的POM文件中,我们可以通过在POM文件中继承 Spring-boot-starter-parent来引用Srping boot默认依赖的jar包,如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.BUILD-SNAPSHOT</version>
</parent>
但是,通过上面的parent继承的方法,只能继承一个 spring-boot-start-parent。实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承。
<dependencyManagement><dependencies><dependency><!-- Import dependency management from Spring Boot --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.0.1.BUILD-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。
如果要继承多个,可以在dependencyManagement中添加,如:
<dependencyManagement><dependencies><!-- Override Spring Data release train provided by Spring Boot --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-releasetrain</artifactId><version>Fowler-SR2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.0.1.BUILD-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
Maven中的dependencyManagement相关推荐
- Maven中的dependencyManagement 意义
1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...
- Maven 梳理 - Maven中的dependencyManagement 意义
1.在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器. 2.pom.xml文件中,jar的版本判断的两种途径 1:如果dependenci ...
- Maven中dependencies与dependencyManagement的区别
之前在一个开源项目代码中看到有人在maven的依赖中使用 dependencyManagement,由于对这个不是很了解,忽然发现网上有个大神已经写了一个比较好的博客,因此这里直接转载(https:/ ...
- Maven中dependencyManagement的使用
本文来说下Maven中dependencyManagement的使用 文章目录 dependencyManagement的使用 dependencyManagement的意义 dependencyMa ...
- maven中DependencyManagement和Dependencies
上次这边朋友问我一个问题,就是他们在pom.xml中的dependency中,看到有一些是<scope>provided</scope>的情况,比如如下: 双击代码全选 1 2 ...
- Maven中 jar包冲突原理与解决办法依赖传递
Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...
- Maven 中的pom.xml文件
Maven中的Pom.xml文件解析 项目管理利器(Maven)--Pom.xml解析<name>项目的描述名</name> <url>项目的地址</url& ...
- (五)Maven中的聚合和继承
一.为什么要聚合? 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我 ...
- Maven——maven中的 pom和import的作用到底是什么
1.前言 在微服务的项目中,我们是不是经常在父项目中写一些统一版本的jar包,但是其中很多时候都有如下类似代码的影子,对于下面的代码中pom和type的作用是否明白呢,如果不明白,欢迎看下面的内容. ...
- maven中profile的使用详解
maven中profile使用详解 1. profile语法 1.1 profile中的配置结构 1.2 profile的定义位置 1.3 如何激活profile 1.4 查看当前处于激活状态的pro ...
最新文章
- 【Ubuntu】制作usb启动盘安装ubuntu18.04时报错:“failed to load ldlinux.c32”
- 安防行业巨头都是如何布局无人机的?
- php mysql 开发微博_3款php+mysql国产微博程序推荐
- 如何在dreamwaver中连接数据库
- 数据结构和算法-链表
- 一个把图片保存到SQL数据库的工具
- Sql Server 部署SSIS包完成远程数据传输
- 完整解决方案:让你的IIS 支持PHP方法
- 性价比不高却出到8?华为存在感最低的一个系列再发新机
- 如何计算虚拟化vcpu_首次公开:腾讯云虚拟化技术原理及可用性提升实践
- visual studio 让代码看起来更舒服
- Oracle 中data与timstamp互转
- This scheduler instance (XXXXX) is still active but was recovered by another
- BZOJ3772精神污染——可持久化线段树+出栈入栈序
- WinForm实现Loading等待界面
- 计算机教学得意之处,wysxhl
- 最全iOS 应用上架流程(提交到AppStore)
- 怎样规划自己的研究生生活?
- 王爽 汇编语言 实验七
- 【FME EXCEL】FME玩转EXCEL小记——不定期更新
热门文章
- 空间相关分析与SDM
- 美赛小队集训-2019年D题O奖讨论
- 苹果/微软/特斯拉的产品美学——向丑而生?
- smart3d加载到谷歌_到底什么是Google Smart Lock?
- 2020.07.01-07.15学习小结
- 搜索了才发现,原来这首歌的原唱是她们,SHE歌曲专辑下载,beyond歌曲专辑下载
- spotify电脑下载歌曲_Spotify Music Converter mac版下载
- 秩和比RSR法算法C语言,秩和比法(用秩和比法计算权重时怎样编秩?)
- php hscan,hgetall 替代 hscan的用法详解。
- BeanUtils 用法