【gradle8升级系列】 constrains 替换force

gradle升级8.0踩坑记录——构建环境篇Could not resolve com.android.tools.build:gradle-api:8.0.0/7.x.x. 设置路径 file - project structure - gradle settings - Gradle JDK 选择17或者11,没有对应的jdk则选择下载。先确保JDK设置的对,android gradle plugin 7.+要求jdk11去编译;第二个,检查当前项目gradle使用的jdk版本,及构建脚本里的jdk版本配置。点击同步,还不行的话添加阿里云的仓库url。到这里,up的工程就正常了。一般来说,这种报错有两个排查思路。到这一步,同步一下,还不行则检查。将其删除 再次同步。 阅读详情

【gradle 8 升级系列】 force 替换为constraints

引言

在Gradle 8中,引入了一种名为"constraints"的新功能,用于管理和解决依赖项之间的冲突。通过使用"constraints",您可以更精确地指定依赖项的版本范围,并确保它们与其他依赖项兼容。

升级传递依赖项的版本

直接依赖与依赖约束

一个组件可能有两种不同类型的依赖关系:

  • 直接依赖:直接由组件所需。直接依赖也称为一级依赖。例如,如果你的项目源代码需要Guava,则应将Guava声明为直接依赖。
  • 传递依赖:由于其他依赖项的需要,组件需要它们。

对于依赖管理的问题通常涉及到传递依赖。开发人员经常错误地通过添加直接依赖来解决传递依赖问题。为了避免这种情况,Gradle提供了依赖约束constraints的概念。

在传递依赖项上添加约束constraints

依赖约束允许您定义构建脚本中声明的依赖项和传递依赖项的版本或版本范围。这是表达应用于配置的所有依赖项的约束条件的首选方法。

当Gradle尝试解析模块版本的依赖关系时,将考虑到该模块的所有依赖声明、所有传递依赖项以及所有依赖约束。选择满足所有条件的最高版本。

如果找不到这样的版本,Gradle将失败并显示冲突的声明。

如果出现这种情况,您可以调整依赖项或依赖约束的声明,或者根据需要对传递依赖项进行其他调整。与依赖声明类似,依赖约束的声明也受配置的影响,并且可以有选择地为构建的某些部分定义。如果依赖约束影响了解析结果,则任何类型的依赖解析规则仍然可以在此之后应用。

示例

以下是如何使用"constraints"的示例:

示例1:定义依赖约束

dependencies {
    implementation 'org.apache.httpcomponents:httpclient'
    constraints {
        implementation('org.apache.httpcomponents:httpclient:4.5.3') {
            because 'previous versions have a bug impacting this application'
        }
        implementation('commons-codec:commons-codec:1.11') {
            because 'version 1.9 pulled from httpclient has bugs affecting this application'
        }
    }
}

在该示例中,依赖声明中省略了所有版本信息。相反,版本信息在约束块中定义。只有当commons-codec作为传递依赖项引入时,才会考虑到commons-codec:1.11的版本定义,因为在项目中未将commons-codec定义为依赖项。否则,该约束不起作用。依赖约束还可以定义丰富的版本约束,并支持严格版本以强制执行一个版本,即使它与传递依赖项定义的版本相矛盾(例如,如果需要降级版本)。

依赖约束只在使用Gradle模块元数据时才会被发布。这意味着如果使用Gradle进行发布和消费,则完全支持它们(即,在使用Maven或Ivy消费模块时,它们将"丢失")。依赖约束本身也可以以传递方式添加。

示例2

  1. 在项目的build.gradle文件中,添加一个"constraints"块,用于定义依赖项的约束:
dependencies {
    constraints {
        implementation("com.google.protobuf:protobuf-java:${protobufJavaVersion}")
    }
}

在这个例子中,我们使用${protobufJavaVersion}变量来指定依赖项的版本。您可以根据您的实际情况替换该变量。

  1. 通过定义约束,Gradle将尝试解决依赖关系并选择与其他依赖项兼容的最新版本。如果存在多个候选版本符合约束条件,Gradle将选择最新的版本作为解决方案。如果找不到满足所有约束的版本,Gradle将报告冲突并提示您解决问题。
  2. 可以使用命令./gradlew dependencies --constraints来查看应用约束后的依赖关系图。

注意事项

使用"constraints"需要遵循一些最佳实践:

  • 约束应该尽可能明确,以便减少潜在的冲突和不确定性。
  • 及时更新约束以使用最新的稳定版本,并保持与其他依赖项的兼容性。
  • 了解项目中所有依赖项的约束关系,以避免潜在的冲突或不一致。

参考链接

Gradle8之下载安装与环境变量配置及国内下资源设置 阅读详情

相关推荐

掌握Gradle依赖约束:构建高效项目的秘诀

Gradle,作为一个灵活且功能强大的构建工具,提供了多种机制来管理项目依赖,其中依赖约束是确保项目依赖一致性的重要特性。本文将详细介绍如何在Gradle中使用依赖约束来管理项目依赖,包括依赖约束的概念、使用方法和实际应用示例。依赖约束(Dependency Constraints)是Gradle提供的一种机制,允许你为项目中的依赖项指定一个固定版本,确保所有依赖项使用的是统一的版本,避免版本冲突。依赖约束是确保项目依赖一致性的有效工具,它可以帮助我们避免版本冲突和简化依赖管理。

2401_85341950的博客 762

Gradle实现Maven中的dependencyManagement

在Maven中,我们可以通过dependencyManagement把Jar包版本进行统一管理,以后各项目引用组件时,就不用标注组件的版本号了。这为解决多项目版本冲突问题带来了很大的便利。那么在Gradle中,是否也可以实现Maven的这个特性呢?答案是肯定的。看了网上的一些资料,发现有些方法比较绕,感觉思路不是很对。其实在官网上就有介绍这个问题,在这里也和大家再做一个分享。1)创建一个项目,里面只需一个build.gradle文件即可。待会我们把要管理的依赖及其版本都封装到这个gradle脚本中,最后把它

Harryfin的专栏 5354

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 490

【Android Gradle 插件】Android 依赖管理 ⑥ ( 依赖冲突处理 | transitive 依赖传递设置 | exclude 依赖排除设置 | force 强制指定依赖库 )

使用如下代码 , 将 androidx.appcompat:appcompat 依赖库 , 强制指定为 1.2.0 版本 , 即使有更高版本的 androidx.appcompat:appcompat:1.4. 依赖库 , 也会强制使用该 androidx.appcompat:appcompat:1.2.0 低版本依赖库;在依赖库中 , 可以将其中的某个依赖库剔除 , 如 androidx.appcompat:appcompat 依赖库中 , 依赖了。

chuyouyinghe的专栏 2710

PLSQL 14.0.6 下载使用教程

众所周知,PLSQL 只是一个oracle第三方开发测试工具,它依赖oracle 客户端搭配使用,但是oracle 客户端有2G,相当庞大,不建议安装。所以我们如果下载安装好PLSQL,再下载好轻量级的支持远程链接的oracle客户端,这样搭配使用可以的话就最好了,答案是可以的。 第一步: PLSQL 下载与安装 PLSQL 14.0.6 下载地址 : https://www.allroundautomations.com/registered-plsqldev/ 下载下来,除了安装路径更改一下,

qq976511508的博客 2134

matlab 图像合成_用MATLAB做图像合成加雾的处理

众所周知,现在有很多算法来对图像进行去雾处理。但反之,对图像增加雾的代码却少之又少,本代码就是基于Matlab实现了对图像的加雾处理。该方法可用做雾天图像的合成数据集。代码公开如下:clear;clc; % close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%i...

weixin_35719260的博客 2060

Gradle 8.9版本 force强制依赖版本的写法

Gradle 8.9版本不支持force强制依赖版本的写法了?

weixin_44068362的博客 1401

ubuntu20.04安装nvidia-docker(解决有 Release 文件。 N: 无法安全地用该源进行更新,所以默认禁用该源错误)

然后想都不要想,nvidia+linux安装的东西,那肯定是不能安装成功的,恶毒的nvidia。按照nvidia官网给出的安装nvidia-docker流程来。在sudo apt-get update出现报错。然后再次update,发现还是会有一些警告类似于。,直接点击网页手动下载,发现下载成功!,注意会有安装先后顺序,安装给的提示就行。最后输入命令发现安装成功。然后替换掉里面的内容。直接不管,直接上命令。

weixin_48144140的博客 1236

ConstraintLayuot学习

ConstraintLayuot学习 ConstraintLayuot学习 一. Constraints(条件约束) 1.1 布局代码 1.2 结果 二. Chains链 2.1 布局代码 2.2 结果 2.3 Chains链的三种形式 2.3.1 spread形式 截图 代码 注意 2.3.2 spread_in形式 截图 代码 2.3.3 packed形式 截图 代码 注意 ...

seekting的专栏 632

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

Gradle依赖项学习总结,dependencies、transitive、force、exclude的使用与依赖冲突解决...

http://www.paincker.com/gradle-dependencies https://docs.gradle.org/current/userguide/dependency_management.html http://www.concretepage.com/build-tools/gradle/gradle-exclude-transitive-dependenc...

weixin_30451709的博客 1165

数据本体论如何指导数仓建模?

数据本体论指导数仓建模的核心在于构建业务语义与数据结构的桥梁。该方法从业务域中抽象标准化知识体系,包含核心概念、属性、关系和规则五大要素,并将其映射为分层数仓模型。通过"业务本体梳理→本体建模→模型映射→治理迭代"的流程,实现数仓从"结构存储"到"语义载体"的升级。相比传统建模,该方法能解决语义不一致、跨域融合难等问题,使数仓具备更好的可扩展性和业务对齐性。实践表明,以数据本体论为指导的数仓建模能显著提升数据资产的可理解性和复用价值。

石榴姐yyds 395

【Gradle-6】一文搞懂Gradle的依赖管理和版本决议

当有多个相同依赖时,不管是哪里引入的,gradle总会优先选择最高版本;当多个相同依赖没有版本约束条件时,优先选择主模块(app)中的版本,且默认有strictly约束版本;force优先级高于strictly,如果二者同时显式声明,则会报错,推荐使用strictly;同时使用force强制依赖版本时,版本决议的结果跟依赖顺序有关,最早force的版本优先;本文主要介绍了Gradle的依赖管理和版本决议。依赖管理里面需要关注的是依赖方式,不同的依赖方式决定了是否会依赖传递;

yechaoa 4897

智能车图像处理2-入门级分析1 ---基础扫线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 7752

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Gradle依赖项之transitive/exclude/force/(+)

传递(transitive) 排除(exclude) 强制(force) 动态版本(+) implementation('com.xxx:xxx:1.0.0@aar') { transitive = true changing = true force = true exclude group: 'com.xxx', ...

果冻豆人的博客 8638

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

gradle 上传jar包_Gradle学习记录014 关于依赖的声明

详细学习Gradle构建的依赖声明。该学习记录基于Gradle官方网站资料。本篇参考链接如下:https://docs.gradle.org/current/userguide/declaring_dependencies.html声明一个模块作为依赖通常声明一个模块作为依赖,需要指定这个模块的版本。Gradle提供了一套机制,允许指定动态的版本。指定固定版本dependencies { // 固...

weixin_39576133的博客 274

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Gradle 8.x版本模块依赖配置

例如有模块eat、transportation、console、work四个模块,其中work模块依赖eat、transportation 这两个模块。2.在work模块中的build.gradle文件中配置。

hellosoftware的专栏 890

【Gradle-8】Gradle插件开发指南

编写一个插件Plugin其实挺简单的,只需要实现Plugin接口,并实现唯一apply方法即可。@Overrideprintln("这是插件:${this.class.name}")这实际上是一个内联类。写完别忘了apply依赖上。第9行的apply方法是调用的PluginAware接口的apply()方法,参数是一个map,用来映射Plugin Id。这是插件:YechaoaPlugin...

chuyouyinghe的专栏 1259

一文了解Gradle 依赖管理(四)- 依赖传递与冲突解决

当 A 依赖 B,B 依赖 C 时,A 会自动获得对 C 的依赖。

成长的烧年 1774

基于Gradle8.0的插件开发

之前使用Groovy、Java 、 手动配置的方式演示了Gradle插件的整个自定义流程《自定义gradle插件》。本文使用java-gradle-plugin 和 Kotlin重新梳理下Gradle插件的自定义流程。1、新建一个Module模块hui_plugin(选择Kotlin Library)2、在hui_plugin模块的build.gradle.kts中引入“java-gradle-plugin” 和 “org.jetbrains.kotlin.jvm” 插件。

zhaonhui的博客 4356

AS中 Gradle8.0 配置greendao,以及项目build.gradle中插件配置方式

发现问题发生在org.greenrobot:greendao-gradle-plugin:3.3.0的问题上,这是由于 Gradle 8 删除了已弃用的IncrementalTask​​Inputs API造成的。找原因在网上很多说需要进行gradle版本进行降级处理,但是一般绕路走不符合程序员的特性,就是不想降版本,事务都是向前发展,哪有后退的道理,就是头铁要上。配置完一编译又报错了。

qq_30245589的博客 6460

gradle-8.0-all 快速下载百度网盘下载

Gradle团队很兴奋地宣布了一个新的主要版本Gradle,8.0。这个主要版本有突破性的变化;请参考Gradle 7.x升级指南寻求指导。 此版本包括对的几项改进科特林DSL。这包括一个解释器来跳过声明性插件的Kotlin编译器,并升级到Kotlin API级。 内置版本的许多好处现在都可以从buildSrc,比如跑步buildSrc直接执行任务,跳过测试,并使用buildSrc。就目前而言,包含的构建仍然有一些优势,这些优势将被合并到buildSrc在未来的版本中。

Jun5008的博客 2949

使用Gradle生成BOM管理依赖版本

写在前边 自Gradle 5开始添加了Maven中 BOM 的支持,然而Gradle 6 以前,想使用BOM 需要使用 Maven 定义 pom.xml 并作为 pom 发布,才行。 参考了 《Gradle 实战》一书,查遍此书并没有通过Gradle生成BOM的方式;查阅 StackOverFlow 发现了一些复杂的实现方式。 好在 Gradle 6 开始,官方提供了一个插件 java-platform 支持生成 BOM,并可以发布,本文就带大家作一个demo 以学习此插件的使用。 什么是 BOM? BOM

拾级而上 4425

恕我直言,自从用完Gradle后,有点嫌弃Maven了!速度贼快!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达99套Java企业级实战项目4000G架构师资料作者 :乐百川(点击阅读原文前往)授权转载自:toutiao.com/i682...

公众号-老炮说Java 2171

一文搞懂Gradle的依赖管理和版本决议

当有多个相同依赖时,不管是哪里引入的,gradle总会优先选择最高版本;当多个相同依赖没有版本约束条件时,优先选择主模块(app)中的版本,且默认有strictly约束版本;force优先级高于strictly,如果二者同时显式声明,则会报错,推荐使用strictly;同时使用force强制依赖版本时,版本决议的结果跟依赖顺序有关,最早force的版本优先;本文主要介绍了Gradle的依赖管理和版本决议。依赖管理里面需要关注的是依赖方式,不同的依赖方式决定了是否会依赖传递;

chuyouyinghe的专栏 3838
上一篇: flink 中计算列和元数据列的使用说明
下一篇: iceberg系列之 hadoop catalog 小文件合并实战
BigDataMLApplication
博客等级 码龄11年 7363粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值