build.gradle解析
1 providedCompile、testImplementation、implementation、api、runtime、testCompile、classpath、natives
这些都是和plugin相关的,不同的plugin定义了不同的dependency configurations。
1.1 compileOnly和providedCompile的区别
compileOnly is only there for dependencies that you really don't need at runtime, e.g because you shade them inside your JAR or because they only contain some annotations that are only needed at compile time. That means if I depend on you, I should not need to provide those.
providedCompile on the other hand is a dependency that you do need at compile and runtime, but which you also declare is "to be provided by the app server", so it is removed from the WAR.
1.2 这些配置项和各个plugin是强相关的
2 什么是dependency configuration,有什么用
每个项目都会依赖于其它的jar包,所以需要指定dependency,但是不是指定了dependency就可以了的,根据情况还需要更加细化的配置,比如该dependency的jar包是不是要打包进war文件,等等。所以,不光需要设置dependency,还需要设置该dependency的configuration。
3 transitive dependency
假如我的project中依赖于Hibernate,那么Hibernate就是我的dependency,而Hibernate自己也是由dependencies的,这些dependencies就是我的transitive dependency。transitive dependency是由gradle自动负责的,假如出现问题,也可以自己进行控制。
4 gradle plugin
gradle本身只是一个平台,可以说一无是处,它什么也不会做,它将所具有的功能都是由gradle plugin提供的,比如编译java代码、c代码等的能力。
4.1 plugin为gradle定义了task
4.2 plugin可以进行配置
比如java plugin的配置source set、生成的jar包的存储目录等等。
4.3 dependency的configuration也是对gradle plugin的配置。
5 compile和runtime的区别
如下:
In the most common case, the artifacts needed at compile time are a subset of those needed at runtime. For example, let's say that a program called app uses library foo, and library foo internally uses library bar. Then only foo is needed to compile app, but both foo and bar are needed to run it. This is why by default, everything that you put on Gradle's compile configuration is also visible on its runtime configuration, but the opposite isn't true.
就是说,transitive dependencies是runtime的,而直接的dependencies是compile的。
一个jar包如果指定为compile的话,那么compile时需要,运行时也需要,那么gradle会把它编译进最终的生成文件中。这个还需要在实际项目中验证。
对于runtime的话,例子如下:
A common example is a JDBC driver, in which the application code is compiled against interfaces in the Java standard libraries, while the implementation is provided by a vendor. The java plug-in provides the runtime and testRuntime configurations for this purpose. These are used to create deployment archives and execute test code, but do not add to the compile-time classpath at all. The runtime configuration does contain the output of the compileJava task, of course, since a project’s .class files are necessarily required to run the project.
build.gradle解析的更多相关文章
- flutter_html 和 WebView 解析html 和 build.gradle源码
一.flutter_html 涉及的 api 接口: http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=20 二.Flu ...
- 解析build.gradle文件
Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言DSL来声明项目设置,摒弃了传统XML(如Ant和Maven)的各种繁琐配置 项目结构如上图: 1.最外层目录下的b ...
- Could not find com.android.tools.build:gradle:1.3.0.
* What went wrong: A problem occurred configuring project ':TZYJ_Android'.> Could not re ...
- Android(java)学习笔记126:Android Studio中build.gradle简介
1.首先我们直接上代码介绍: // Top-level build file where you can add configuration options common to all sub-pro ...
- Android(java)学习笔记66:Android Studio中build.gradle简介
1.首先我们直接上代码介绍: // Top-level build file where you can add configuration options common to all sub-pro ...
- 【转载】Gradle for Android 第二篇( Build.gradle入门 )
理解Gradle脚本 当然我们现在讨论的所有内容都是基于Android studio的,所以请先行下载相关工具.当我们创建一个新的工程,Android studio会默认为我们创建三个gradle文件 ...
- 解决 Could not find com.android.tools.build:gradle 问题
今天拉同事最新的代码,编译时老是报如下错误: Error:Could not find com.android.tools.build:gradle:2.2.0.Searched in the fol ...
- build.gradle文件介绍
对于以前用Eclipse开发安卓的小伙伴来说,Gradle文件是陌生的. 不同于Eclipse,而Android Studio 是采用Gradle来构建项目的. 先来介绍最外层目录下的build.gr ...
- 怎么将Android studio 的“ build:gradle改低一点”
参考来源:http://bbs.qcloud.com/thread-17193-1-1.html Error:Execution failed for task ':xxxx:compileDebug ...
随机推荐
- pytorch笔记:09)Attention机制
刚从图像处理的hole中攀爬出来,刚走一步竟掉到了另一个hole(fire in the hole*▽*) 1.RNN中的attentionpytorch官方教程:https://pytorch.or ...
- 数据库insert update select语句
http://database.51cto.com/art/200903/113939_1.htm (更新语句) http://blog.csdn.net/chan ...
- 一键分享到QQ空间、QQ好友、新浪微博、微信代码
通过qq空间.qq聊天.新浪微博和微信二维码分享平台提供的接口,实现把网页中对应的图片.标题.描述的信息参数用javascript获取后传进接口中,实现一键分享. 使用到的接口(测试时需要登录,网址和 ...
- vue 选项卡
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...
- tinyXml输出utf-8文档
TiXmlDocument虽然能读取utf-8的xml文件,但读入后在内存中是以多字节存储.如果新建一个TiXmlDocument,即使定义头为utf-8编码,直接调用SaveFile方法保存的文档仍 ...
- [笔记] APIO 2018 Day1
计算折纸 computaional origami 全息算法(???) margulis napkin problem 素数里有任意长的等差数列 xor gate Σxi or gate(exact ...
- mysql查询排名
student_work表 student_info表 sql语句:按grade从高到低排名 结果:
- topcoder SRM 639 div2
见这里 http://ygdtc.sinaapp.com/?p=257
- 洛谷P1186 玛丽卡
题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城 ...
- Linux下汇编语言学习笔记25 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...