首页 > 其他分享 >Maven Dependency Version:pom依赖版本固定或自动升级

Maven Dependency Version:pom依赖版本固定或自动升级

时间:2024-01-19 15:57:24浏览次数:33  
标签:传递 依赖 1.0 Maven Dependency pom 版本

先介绍过Maven的依赖调节机制。

可选依赖(Optional dependencies)

被依赖的项目主动不把可以传递的依赖传递下去,好比卖车的主动声明自己不会让买车的人买这辆车附加的保险业务。下面在解决思路中会举例说明。

解决思路

有了上面的知识背景,考虑使用Maven提供的Optional和Exclusions来控制依赖的传递。

A
  -> B
D
  -> A
  -> B

Optional 定义后,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。

  • A/pom.xml
<dependency>
    <groupId>com.bar</groupId>
    <artifactId>B</artifactId>
    <version>1.0</version>
    <optional>true</optional>
</dependency>

这种情况下,A对B的依赖将不会传递给D.

就近原则

依赖调节是为了解决版本不一致的问题(multiple versions),并采起就近原则(nearest definition)。

举例来讲,A项目经过依赖传递依赖了两个版本的D:

A -> B -> C -> ( D 2.0 ) ,

A -> E -> ( D 1.0 )

那么最终A依赖的D的version将会是1.0,由于1.0对应的层级更少,也就是更近。maven

除了咱们经常使用的<version>1.1.0</version>,在声明依赖版本的时候,能够经过表达式灵活地配置版本号。

例如配置jar包x的<version>标签支持以下几种语法:

1.0: 推荐依赖版本,此版本号可能会被覆盖。
[1.0]: 强制依赖此版本。

还能够控制依赖的版本范围:

(,1.0]: x <= 1.0
[1.2,1.3]: 1.2 <= x <= 1.3
[1.0,2.0): 1.0 <= x < 2.0
[1.5,): x >= 1.5

同时声明多个版本范围也是能够的,只要用逗号分隔便可:

(,1.0],[1.2,): x <= 1.0 或者 x >= 1.2

当你不但愿依赖某个版本的时候,能够声明为:

(,1.1),(1.1,)

举例来讲,你想依赖Apache的commons-math3的最新稳定版,并且不想每次有了新的版本手动去升级pom.xml,能够使用以下<version>配置:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>[3.+,)</version>
</dependency>

编译项目,你会看到项目中依赖的版本为当前(2019/03/04)最新的正式版:3.6.1。

固然,这么作是有风险的,由于自动升级版本可能引入未知的修改。

除非你信任这个项目的发布者,相信其发布的新版本都是向下兼容的,这样才能保证自动升级到最新版本之后不会出问题。

标签:传递,依赖,1.0,Maven,Dependency,pom,版本
From: https://www.cnblogs.com/shamo89/p/17974829

相关文章

  • 无涯教程-Maven - 管理依赖项
    Maven的核心功能之一是依赖管理。一旦无涯教程要处理多模块项目(由数百个模块/子项目组成),管理依赖项将是一项艰巨的任务。Maven提供了高度的控制权来管理这种情况。依存关系当一个库(如A)依赖于另一个库(如B)时,通常是一种情况。如果另一个项目C要使用A,那么该项目也需要使用库B......
  • 无涯教程-Maven - 构建自动化
    BuildAutomation定义了一种方案,一旦项目构建成功完成,相关项目的构建过程就会开始,以确保相关项目稳定。考虑一个团队正在开发项目bus-core-api,另外两个项目app-web-ui和app-desktop-ui依赖。app-web-ui项目正在使用bus-core-api项目的1.0-SNAPSHOT。<projectxmlns......
  • Maven使用${revision}实现多模块版本统一管理
    父pom: <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://mave......
  • Maven中的 scope 简单介绍
    Maven中各种scope的区别compile,默认,参与编译,测试,运行,打包等过程,大部分依赖都是这个test,仅参与测试代码的编译,运行,如junitruntime,参与测试,运行,打包,不编译,如mysql-connnectorprovided,参与编译,测试,运行,不打包,如java.servlet-apisystem,参与编译,测试,运行,不打包,从本地系统读取,......
  • IntelliJ IDEA快速查询maven依赖关系
    IntelliJIDEA快速查询maven依赖关系1.在Maven窗口中点击Dependencies->showDependencies2.得到依赖关系图此时原有快捷键Ctrl+f可以查询jar包,如果没有查询菜单出来则设置快捷键方式为File->Settings->Keymap->搜索栏输入find->在MainMenu下Edit下Find下Find双击算则Ad......
  • Android gradle dependency tree change(依赖树变化)监控实现,sdk version 变化一目了然
    @目录前言基本原理执行流程diff报告不同分支merge过来的diff报告同个分支产生的merge报告同个分支提交的diff报告具体实现原理我们需要监控怎样的Dendenpency变化怎样获取dependencyTreeproject.configurations方式./gradlewdependenciesAsciiDependencyReportRe......
  • maven
    文章目录一、下载Maven二、解压及配置环境三、测试四、问题(zsh)五、配置本地仓库1.建立本地仓库2.修改配置文件配置六、配置阿里云加速一、下载Maven官网:maven-apache下载可执行文件的bin压缩包二、解压及配置环境1.常用工具最好都放在一个地方,自己好找也......
  • maven项目关于target目录没有生成xml文件的解决方案
    1.这是我的项目目录结构2.在我通过maven的install后,target目录中并没有xml文件解决方案:1.在maven的pom文件中添加2.再通过maven的install后,target目录中出现xml文件......
  • 聊一聊为什么我要整合Microsoft.Extensions.DependencyInjection和Castle.Core
    前言如果用到动态代理,大家可能会有几种选择,排到前列的是Autofac+Castle、AspectCore和DoraInterception,我将从我当时研究的经历,以及我遇到的场景,为大家展示下聊一聊我为什么要费时费力的整合Microsoft.Extensions.DependencyInjection和Castle.Core当时遇到的场景直接上源码......
  • IDEA解决每次拉去项目都要重新配置Maven
    电脑要去配置Maven的话自己去搜一个,网上一堆一堆的每次重新打开一个项目,或者拉去一个项目都要重新去配置maven,好烦啊.现在我们配置一遍,就不用总是去配置了第一:关闭现在的项目第二: 第三配置自己的maven地址就行了......