首页
学习
活动
专区
圈层
工具
发布

一文彻底搞清Gradle依赖

依赖类型 dependencies DSL标签是标准Gradle API中的一部分,而不是Android Gradle插件的特性,所以它不属于android标签。...举个例子,A依赖B,B依赖C,如果都是使用api配置的话,A可以直接使用C中的类(编译时和运行时),而如果是使用implementation配置的话,在编译时,A是无法访问C中的类的。...compileOnly 与provided对应,Gradle把依赖加到编译路径,编译时使用,不会打包到输出(aar或apk)。这可以减少输出的体积,在只在编译时需要,在运行时可选的情况,很有用。...{ compile.exclude module: 'cglib' //全局排除原有的tnet jar包与so包分离的配置,统一使用aar包中的内容 all*.exclude...@jar标识符忽略传递依赖: compile 'com.zhyea:ar4j:1.0@jar' 4.强制使用某个版本 如果某个依赖项是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force

5.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Gradle 的Dependencies

    依赖的方式 Gradle 中的依赖分别为 直接依赖,项目依赖,本地 jar 依赖 dependencies { //①.依赖当前项目下的某个模块[子工程] implementation...依赖的类型 类似于 Maven 的 scope 标签,gradle 也提供了依赖的类型,具体如下所示: compileOnly 由java插件提供,曾短暂的叫provided,后续版本已经改成了compileOnly...在 gradle 7.0 已经移除 api java-library 插件 提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。...会使用最新版本的 jar 包【考虑到新版本的 jar 包一般都是向下兼容的】,实际开发中,还是建议使用官方自带的这种解决方案。...当然除此之外,Gradle 也为我们提供了一系列的解决依赖冲突的方法: exclude 移除一个依赖,不允许依赖传递,强制使用某个版本 Exclude 排除某个依赖 dependencies {

    1.6K20

    Android -Gradle依赖导入及相关知识

    比如:app依赖于moudle1,而moudle1 implementation Glide库,那么app如果直接引用moudle1,可以使用moudle1中采用implementation依赖Glide...Project build.gradle 咱们一个一个解释其含义: buildscript:用来加载gradle脚本自身需要使用的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等 repositories...' exclude group: 'bcd' exclude group: 'abc', module: 'bcd' //禁止依赖的传递,gradle自动添加子依赖项,默认为...build.gradle 中添加如下的代码,该代码的意思是:在项目构建时,遍历所有依赖,然后 com.android.support 包下的依赖替换同一个版本。...但此方法也有弊端:就是每次构建的时候,多了一个遍历过程,会加长构建时间。因此,推荐使用 exclude 关键字排除。 那我们如何判断是那几个library的文件冲突了呢?

    1.2K20

    【Android Gradle 插件】Android 依赖管理 ③ ( dependencies 依赖配置 | Project#dependencies 函数分析 | 自定义依赖配置 )

    依赖配置范围 ---- Gradle 构建过程 中 , 依赖的 作用范围 是不同的 , 如 : 有的依赖只在 源码编译时使用 , 如 Android Gradle 插件 依赖 ; 有的依赖只在 开发时单元测试运行..., 如 单元测试依赖 ; 有的依赖需要 编译打包到 Apk 文件中 , 如 工程中的依赖库 ; 依赖配置 的 作用范围 是可以自定义的 , 在 Gradle 构建工具中 , 内置了如下几种依赖配置项..., 在 【Android Gradle 插件】Gradle 依赖管理 ⑩ ( dependencies 依赖配置项 configurations ) 博客中 , 提到了在 dependencies 依赖配置中..., Android Gradle Plugin 插件 和 Gradle 官方默认配置好了一批依赖配置项 , 如 implementation api compileOnly runtimeOnly annotationProcessor...已废弃 ; 在 build,gradle 构建脚本 中的 dependencies 脚本块 中 , 可以使用上述 依赖配置 ; Android 依赖参考文档 : https://developer.android.google.cn

    1.3K10

    【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )

    文章目录 一、Gradle 构建脚本结构 二、Gradle 脚本中定义闭包 三、Gradle 脚本中变量的定义与使用 四、dependencies 依赖设置 五、设置 android 脚本块 1、设置编译版本和编译工具版本..., 设置 启动 Activity 项 ; 在 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ② ( 组件化基本实现 | Project 相关目录 | 定义组件切换标志位...') } 注意上述代码中的 api 依赖配置 , 需要进行 依赖传递 , 一般进行底层开发 , 自己开发底层库时才需要传递依赖 , 使用 api 依赖配置会增加 Gradle 构建的时间 , 非必要不用...; 绝大多数的导入依赖操作使用的是 implementation 配置 , 不进行依赖传递 ; 二、Gradle 脚本中定义闭包 ---- 参考 【Groovy】闭包 Closure ( 自定义闭包参数...-> // 闭包具体执行内容 } 三、Gradle 脚本中变量的定义与使用 ---- 在 Android 的 Gradle 构建脚本中 , 尽量将用到的 变量 , 闭包 , 方法

    1.8K21

    手把手教你如何从maven迁移到gradle

    ,类似maven的runtime 编译时依赖 compileOnly,类似maven的provided 测试依赖 testImplemention, 类似maven的test 与gradle的对比如下...X2可以将这些依赖项声明为可选的,这样当您的项目在其POM中将X2声明为直接依赖项时,X2支持的所有驱动程序不会自动包含在项目的类路径中。...其实 Optional依赖不是optional的,在上述例子中,如果使用Porject-A的功能,但是没有引用Project-A的依赖,就会ClassNotFoundException异常。...,使用optioanl插件,也就是gradle的registerFeature 当你只需要编译,测试也不需要,因为你确定容器或者其他模块一定会存在这个依赖,例如servlet api,使用compileOnly...DependencyManagement ---- 在maven中,在父pom工程中定义依赖的版本使用标签,标识不引入依赖,只是声明依赖。

    3.3K40

    Android Studio3.1.0升级问题记录

    还是乖乖的改吧,由于是我们的依赖的library中使用了compile,相当于是library依赖了一个第三方库,直接改为implementation就相当于屏蔽掉了app对library依赖的第三方库...,这样也体现了“第三方库隔离”的原则,如果以后依赖的库变了,你只需要修改library中依赖的库及app调用的方法即可,不用动app里面的代码了~ 第三个错误如下 Duplicate zip entry...,我猜测一定是Jar包重了,仔细找了一下,发现两个library中都使用了 阿里的httpdns的jar包,只不过是Jar包的版本不一样,旧版本中其中一个library中使用了 provided 编译...,所以没有报冲突,现在新版本推荐使用 compileOnly 关键字,替换为compileOnly关键字后还是报一样的错,哎呦!...这就纳闷了,compileOnly的意思不就是编译时依赖,不打紧包中的意思吗?怎么还冲突?

    96220

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

    但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: 1. Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长; 2....一、安装Gradle 最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。...相较于maven一大串的XML配置,gradle的依赖项仅需一行。...search网站,是寻找maven和gradle依赖包的最佳网站,可以非常轻松的搜索和使用依赖项。...implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。

    1.1K00

    说实话,用完Gradle之后,有点嫌弃Maven了。贼好用!

    gradle:现代高效的java构建工具 安装 Gradle 最传统的安装方法就是去 Gradle 官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。...相较于 Maven 一大串的 XML 配置,Gradle 的依赖项仅需一行。...package search 网站,是寻找 Maven 和 Gradle 依赖包的很不错的网站,可以非常轻松的搜索和使用依赖项。...implementation 的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。...但是 api 允许我们将自己类库的依赖暴露给我们类库的使用者。 compileOnly 和runtimeOnly :这两种顾名思义,一种只在编译时可见,一种只在运行时可见。

    1.1K20

    换掉 Maven,我用它!!!

    但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: 1、一来Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长; 2、二来XML...安装gradle 最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。...相较于maven一大串的XML配置,gradle的依赖项仅需一行。...search网站,是寻找maven和gradle依赖包的最佳网站,可以非常轻松的搜索和使用依赖项。...implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。

    63220

    自从用完 Gradle 后,有点嫌弃 Maven 了!

    Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长; 2. XML文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦; 3....一、安装Gradle 最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。...相较于maven一大串的XML配置,gradle的依赖项仅需一行。...search网站,是寻找maven和gradle依赖包的最佳网站,可以非常轻松的搜索和使用依赖项。...implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。

    2.9K20

    不好意思, Maven 该换了!

    但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: 一来Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长; 二来XML文件不太灵活...相较于maven一大串的XML配置,gradle的依赖项仅需一行。另外,最新 Java 面试题整理好了,大家可以在Java面试库小程序在线刷题。...search网站,是寻找maven和gradle依赖包的最佳网站,可以非常轻松的搜索和使用依赖项。...implementation的作用域会让依赖在编译和运行时均包含在内,但是不会暴露在类库使用者的编译时。举例,如果我们的类库包含了gson,那么其他人使用我们的类库时,编译时不会出现gson的依赖。...因为gradle脚本实在是太灵活了,有些脚本中可能依赖了github或者其他地方的远程脚本。这时候上面设置的下载镜像源就不管用了。 所以有条件还是干脆直接使用全局代理比较好。

    79020

    Gradle依赖配置compile,implementation和api的区别

    主要跟Gradle的版本有关系 Gradle3.4新增了Java-library插件,java-library插件使用了新的依赖配置implementation和api。...:它们声明的依赖其他模块是否能使用。...api 当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用 implementation 当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用...compileOnly 依赖会添加到编译路径中,但是不会打包到apk中,因此只能在编译时访问,且compileOnly修饰的依赖不会传递。...runtimeOnly 与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到apk中,运行时使用。没有使用过。

    10.7K21

    Gradle基础操作一

    依赖的类型 compileOnly 由java插件提供,曾短暂的叫provided,后续版本已经改成了compileOnly,适用于编译期需要而不需要打包的情况:比如servlet-api runtimeOnly...在 gradle 7.0 已经移除 api java-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。...插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。...总之,除非涉及到多模块依赖,为了避免重复依赖,咱们会使用api,其它情况我们优先选择implementation,拥有大量的api 依赖项会显著增加构建时间。...Gradle 来说这里就有冲突了 解决方案 方案一:default 默认下,Gradle 会使用最新版本的 jar 包【考虑到新版本的 jar 包一般都是向下兼容的】,实际开发中,还是建议使用官方自带的这种解决方案

    65520

    Gradle依赖方式——Lombok在Gradle中的正确配置姿势

    很多人在项目依赖中直接这样写 compile "org.projectlombok:lombok:1.18.4" 但这样的处理在Gradle 5.0以上被命令禁止了,在4.x的高级版本中编译时也会有对应的告警...Gradle的依赖方式 下面先来了解下目前Gradle(4.1以上)的几种常见的依赖方式。 api:与旧版的compile相同; implementation:解决重复依赖问题。...并且在打jar/war包的时候,并不需要把lombok的依赖打进包中,所以Lombok在依赖上应该是compile only(仅在编译时生效)才对。...如果不配置compileOnly,只配annotationProcessor(gradle5.0以上才有),也会build成功,但会把依赖也打包进去。...针对5.0以下版本,对应依赖如下 compileOnly 'org.projectlombok:lombok:1.18.4' 看完后,大家可以动起来,把自己项目中的lombok配置改掉吧(注意gradle

    13.5K41
    领券