主要跟Gradle的版本有关系 Gradle3.4新增了Java-library插件,java-library插件使用了新的依赖配置implementation和api。...旧的依赖配置compile被废弃。... 3.4+ 使用java-library插件替换java插件 apply plugin: 'java-library' 新的依赖配置:implementation和api dependencies {...', name: 'spring-boot-starter' } api和implementation两种依赖的不同点在于:它们声明的依赖其他模块是否能使用。...api 当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用 implementation 当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用
另外,gradle 3.0.0版本以上,还有依赖指令api。本文主要介绍下implementation和api的区别。...implementation指令 这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。...简单的说,就是使用implementation指令的依赖不会传递。...但是,如果testLib使用的是api来引用Glide: api 'com.github.bumptech.glide:glide:3.8.0' 则与gradle3.0.0之前的compile指令的效果完全一样...,app的module也可以引用Glide,这就是api和implementation的区别。
这个主要看Java项目所使用的Gradle的版本。 Gradle 3.4 新增了Java-library插件,java-library插件使用了新的依赖配置implementation和api。...旧的依赖配置compile被废弃。...: 'java-library' 新的依赖配置:implementation和api dependencies { api 'commons-httpclient:commons-httpclient...api:当其他模块依赖于此模块时,此模块使用api声明的依赖包是可以被其他模块使用。...版本依赖关键字详解(2.0与3.0所有关键字) compile(api) 这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
文章目录 一、Gradle 自动下载并配置构建环境 二、Gradle 提供 API 扩展与开发工具集成 三、Gradle 内置 Maven 和 Ivy 依赖管理 四、Gradle 使用 Groovy 编写构建脚本...的 Gradle 项目中 , 提供了 gradlew 和 gradlew.bat 工具 , 如下图的红色矩形框中 ; 分别是 Linux 和 Windows 中的命令行工具 , 该命令行工具可以 自动...中配置 Gradle 版本 , 可以保证当前工程构建环境是正确的 ; 二、Gradle 提供 API 扩展与开发工具集成 ---- API 扩展 : Gradle 构建工具 提供了 强大的 Groovy...Android Studio 等工具中 , 都可以集成 Gradle 构建工具 ; 三、Gradle 内置 Maven 和 Ivy 依赖管理 ---- Gradle 提供了 内置 Maven 和 Ivy...和 Ant 中 使用 xml 文件配置构建脚本 ; Gradle 中不再使用 xml 配置文件进行相关配置 , 而是 使用 Groovy 语言编写构建脚本 ; Groovy 语言是 领域专用语言 DSL
watch 文档 https://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html include 和 extend 文档 https...状态之间的依赖关系 1 状态间关系: 2 1、我依赖谁 require 3 2、谁依赖我【我被谁依赖】 require_in...SLS技巧: 12 1、按状态分类 如果单独使用,很清晰 13 2、按服务分类 可以被其他的SLS include。...例如:LNMP include mysql 的服务 【生产优先使用】 4. 依赖关系案例 4.1. 部署架构 ? 4.2....Apache和PHP的SLS【正向依赖】 1 [root@salt100 lamp2]# pwd # 所在目录 2 /srv/salt/lamp2 3 [root@salt100 lamp2]#
此外,与其他构建工具相比,Gradle提供了更加直观的依赖管理和构建流程定义,使得开发者可以更加专注于编码,而不是花费大量时间处理构建和依赖问题。...这些依赖通常包括用于代码生成、注解处理或提供API定义(例如接口)的库。 2)为何我们需要编译时依赖 代码完整性: 编译时依赖提供了编写源代码时所需的必要类和接口。...虽然在编译时你可能只依赖于JDBC的API(即java.sql包),但在运行时,你需要具体的数据库驱动来实现这些API。...使用implementation和api配置:在build.gradle文件中, 使用implementation为编译时依赖和api为运行时依赖。...这确保了只有真正需要的依赖会被包括在最终的产出中。 避免使用compile配置:从Gradle 3.0开始,compile已经被废弃。应该使用implementation或api来替代。
写在前面的话,最近在系统的学习Gradle,本来想写一篇关于 Gradle 的介绍。 但在官网发现了这篇关于 Gradle 的介绍,已经介绍的很好了,我就很直接翻译过来了。...因为是运行在 JDK 上,这对于使用 Java 的用户是个额外的好处,可以在构建脚本中使用标准的 Java API,例如 自定义任务和插件,另外,因为是基于JDK的,它可以很好的跨平台运行。...使用适当的插件可以很容易的为许多项目生成构建脚本。 约定并没有什么限制,可以覆盖原有的约定,添加自定义任务等来实现自己的构建模型。...一旦图创建完成,Gradle 将确定哪些任务以何种顺序运行,然后执行它们。 下面是两个任务图,一个是简单的,一个是很详细的,任务的依赖关系通过箭头表示。 ?...自定义模型 Gradle允许你引进除任务,文件和依赖配置之外的概念。可以在大多数语言插件中看到这一点,它们将源集的概念添加到构建中。对构建过程进行适当的建模可以极大地提高构建的易用性和效率。
此外,api和compileOnlyApi是java-library插件提供的,用于更细粒度地控制模块间的依赖关系。...,我对其进行了优化和整理: 特性/场景 api配置选项 implementation配置选项 编译时 - 依赖可以传递给模块的使用者。...api和implementation是Gradle中常用的两种依赖配置选项,它们在编译时和运行时的行为有所不同。api配置选项允许依赖传递,这在多模块的项目中非常有用,可以确保模块间的依赖关系一致性。...适用场景:implementation 适用于那些不应该被其他模块或应用程序直接使用的库。它通常是内部实现细节,不是用来暴露公共 API 的。...4.3 拓展 api 和 implementation 案例分析 : 在多模块项目中,使用 api 和 implementation 可以有效地管理模块之间的依赖关系: 使用 api:当你希望一个模块的依赖成为另一个模块的公共
repositories块定义了构建脚本将在哪里寻找依赖关系。Maven Central是最常见的(mavenCentral()),但也可以配置其他仓库,包括自定义仓库和本地仓库。...此外,当您定义自定义任务和属性(在Gradle API中找不到)时,排序很重要,因为这些符号不会被预先定义,因此必须在构建脚本中定义它们才能使用它们。...原因是这些重载函数也可以使用闭包代码块,因此可以进行深度自定义。 探索Gradle依赖项配置 依赖关系块内部是一系列配置和名称。...您可能会看到的另一个依赖项配置是runtimeOnly和testRuntimeOnly。这声明了运行时提供的不需要对其进行编译的依赖项。 定义依赖关系的方法比对本文的范围有用的方法更多。...到此,基础篇完事儿,提高篇中将会实践一下自定义任务和Groovy闭包在Gradle配置文件build.gradle文件中如何使用。
依赖对齐和版本锁定提供了可扩展且灵活的依赖管理模型。通过新的性能和依赖关系管理、日志记录和弃用的 API 使用检查,构建扫描得到了显著的改进。...构建扫描 通过对性能、依赖管理、日志记录和废弃api的使用进行新的检查,构建扫描有了显著的改进。...依赖约束 依赖约束提供了对传递依赖项的可靠性控制,已声明的约束列在改进的依赖关系洞察报告和构建扫描中。...按照我们的指南,使用Worker API为自定义任务启用更快的构建任务,下图展示了使用Worker API和不是也Worker API的区别。...Gradle 5.0为嵌套DSL元素提供了一流的api,在考虑用户如何配置任务时提供了更大的灵活性。 Gradle 5.0为计算(或延迟)任务输入和输出提供了额外的API便利。
It will be removed at the end of 2018 翻译过来就是: 配置“编译”已经过时,取而代之的是“实现”。它将在2018年底被移除。...还是乖乖的改吧,由于是我们的依赖的library中使用了compile,相当于是library依赖了一个第三方库,直接改为implementation就相当于屏蔽掉了app对library依赖的第三方库...api的访问权限,而我们的app刚好用到了library依赖的第三方库的api,所以直接改为implementation是不行的,要想让app能访问到就将其改为 api就可以了,其实这不是一个好的解决办法...,最好的解决办法是,library中封装一层app访问library依赖的第三方库api的方法,这样的话app是和library依赖的第三方库是没有任何关系的,这样就降低了app与library依赖的第三方库的耦合性...,我猜测一定是Jar包重了,仔细找了一下,发现两个library中都使用了 阿里的httpdns的jar包,只不过是Jar包的版本不一样,旧版本中其中一个library中使用了 provided 编译
通过新的性能和依赖关系管理、日志记录和弃用的 API 使用检查,构建扫描得到了显著的改进。静态类型的 Kotlin DSL 可在创建构建逻辑时提供代码完成、重构和其他的 IDE 辅助。...构建扫描 通过对性能、依赖管理、日志记录和废弃api的使用进行新的检查,构建扫描有了显著的改进。...依赖约束 依赖约束提供了对传递依赖项的可靠性控制,已声明的约束列在改进的依赖关系洞察报告和构建扫描中。...按照我们的指南,使用Worker API为自定义任务启用更快的构建任务,下图展示了使用Worker API和不是也Worker API的区别。 ?...Gradle 5.0为嵌套DSL元素提供了一流的api,在考虑用户如何配置任务时提供了更大的灵活性。 Gradle 5.0为计算(或延迟)任务输入和输出提供了额外的API便利。
我们之前说过,Gradle 的核心是一种基于依赖性编程的语言。 在 Gradle 术语中,这意味着您可以定义任务和任务之间的依赖关系。...Gradle 保证这些任务按照其依赖项的顺序执行,并且每个任务只执行一次。 这些任务形成了一个有向无环图。 有一些构建工具可以在执行任务时建立这样的依赖关系图。...在执行任何任务之前,Gradle 构建完整的依赖关系图。 这位于 Gradle 的心脏地带,使许多事情成为可能,否则这些事情是不可能实现的。 您的构建脚本配置这个依赖关系图。...Initialization 初始化 Configuration 配置 Execution 执行 Settings file 设置文件 在构建脚本文件旁边,Gradle 定义了一个设置文件。...多项目构建必须在多项目层次结构的根项目中有 settings.gradle 文件。 这是必需的,因为设置文件定义了哪些项目正在参与多项目构建(参见创作多项目构建)。
3.3 执行阶段 在配置阶段已经构造了 Task DAG,执行阶段(Execution Phase)就是按照依赖关系执行 Task。...4.2 Project 属性 API Project 提供了一系列操作属性的 API,通过属性 API 可以实现在 Project 之间共享配置参数: hasProperty(String): 判断是否存在指定属性名...4.2.3 ext 属性 Gradle 为 Project 和 Task 提供了 ext 命名空间,用于定义额外属性。...在构建配置阶段,Gradle 会根据 Task 的依赖关系构造一个有向无环图,以便在执行阶段按照依赖关系执行 Task。...属性设置依赖列表,也可以通过 dependsOn() 方法添加一个依赖; 输入输出隐式依赖: 通过建立 Task 之间的输入和输出关系,也会隐式建立依赖关系。
通过新的性能、依赖管理、日志记录和废弃的API使用检查,构建扫描有了显著的改进。...4.构建扫描 通过对性能、依赖管理、日志记录和废弃api的使用进行新的检查,构建扫描有了显著的改进。...细粒度的传递依赖关系管理 Gradle 5.0提供了几个新的特性来定制如何选择依赖项,以及改进的POM和BOM支持: 依赖约束允许您定义版本或版本范围来限制直接和传递依赖版本(Maven不支持)。...4.发布 APIs Gradle 5.0引入了新的api来改进对Maven和Ivy存储库的发布: 签名插件支持对发布的所有产物签名。 发布了配置范围内的依赖项排除。...Gradle 5.0为嵌套DSL元素提供了一流的api,在考虑用户如何配置任务时提供了更大的灵活性。 Gradle 5.0为计算(或延迟)任务输入和输出提供了额外的API便利。
Maven作为后来者, 继承了Ant的项目构建功能, 并且提供了依赖关系, 项目管理的功能, 因此它是一个项目管理和综合工具, 其核心的依赖管理, 项目信息管理, 中央仓库, 约定大于配置的核心功能使得...典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器以及提供,就不需要Maven重复地引入一遍。 runtime:运行时依赖范围。...使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。....+'”,在Gradle中支持动态的版本依赖,在版本号后面使用+号可以实现动态的版本管理。...Gradle也支持多模块构建,在parent的build.gradle中可以使用allprojects和subprojects代码块分别定义应用于所有项目或子项目中的配置。
某些Task可能依赖其他Task。哪些没有依赖的Task总会被最先执行,而且每个Task只会被执行一遍。每次构建的依赖关系是在构建的配置阶段确定的。...然后分析project之间的依赖关系,下载依赖文件,分析project下的task之间的依赖关系。...3.settings.gradle ok,我们先看看settings.gradle文件中都有哪些内容: image.png 此文件一看便知:如果我们的Project依赖了N个本地的module...的build.gradle中进行自定义给所有module使用同一版本,方便管理。...,能否在设备上调试以及签名不一样,其他代码和文件资源都是一样的 productFlavors Gradle的多渠道打包,如下我们定义了yingyongbao 平台和yingyongbaovip
业务组件可上可下,灵活多变;而基础组件,为新业务随时集成提供了基础,减少重复开发和维护工作量。 下图是我们期望的组件化架构: 图片 组件依赖关系是上层依赖下层,修改频率是上层高于下层。...我们知道,在 AndroidStudio 开发 Android 项目时,使用的是 Gradle 来构建,Android Gradle 中提供了三种插件,在开发中可以通过配置不同的插件来配置不同的module...使用maven引用组件:1、发布组件的arr包 到公司的maven仓库,2、然后在壳工程中就使用implemention依赖就可以了,和使用第三方库一毛一样。...实现路由跳转 前面提到,所有的业务组件都依赖了 Common 组件,所以我们在 Common 组件中使用关键字 api 添加的依赖,业务组件都能访问。...支持单模块独立初始化 支持懒加载初始化 独立初始化允许多任务依赖(参考Gradle Task) 支持编译期循环引用检测 支持自定义业务初始化时机 具体使用如下: common组件依赖 applifecycle-api
在构建脚本的顶层(大多数插件扩展被添加到Project对象中)和配置扩展的块中都会发生这种情况。 注意,容器元素(如配置、任务和sourceSets)的访问器利用了Gradle的配置避免api。...可以在依赖项声明和configurations{}块中为配置名使用字符串字面量。 在这种情况下,IDE无法帮助你发现可用的配置,但你可以在相应的插件文档或运行gradle依赖项中查找它们。...报告提供了名称和类型。作为最后的手段,你也可以检查插件的源代码,但在大多数情况下这是不必要的。...采用这种方法意味着您将不能对插件提供的模型元素使用类型安全访问器。你将不得不依赖字符串字面量和标准的Gradle api。...例如,如果我们引入了一个新的API来解决依赖关系,而一个插件想要使用这个API,那么他们要么需要放弃对旧版本Gradle的支持,要么需要做一些事情。