gradle配置_Gradle配置

gradle配置

在这篇文章中,我们将介绍有关Gradle配置的综合文章。

1.技术

Gradle是用于自动任务管理的开源构建工具。 它基于Apache Ant,Apache Maven的概念。 Gradle是使用Groovy语言开发的。 Gradle是使用基于Groovy的领域特定语言(DSL)开发的。 Gradle构建以Apache Maven的形式包含Groovy语言的任务,而Apache Ant构建文件为XML格式。

Gradle使用有向无环图(DAG)确定执行任务的顺序。 Gradle是为多项目构建而设计的,这意味着一个项目将有许多子项目,并且可以增长到很多子项目。 Gradle的独特功能是通过智能确定构建树的哪些部分被修改,哪些未被修改,来支持增量构建。 如果树中的某些部分未修改,则将通过显示最新状态来跳过它,而其他部分将被重新执行,这将减少项目的构建时间。

2. Java项目结构

与Maven目录结构类似,Gradle的项目结构还将包含src / main / java和src / main / resources用于Java类和类路径资源,src / test / java和src / test / resources将包含测试类和相应地测试资源。

3.Gradle配置

Gradle是指定依赖项的基本概念。 使用配置,我们可以用来指定依赖关系,这些依赖关系可以在本地缓存或Maven Central存储库或在Gradle构建文件中配置的任何存储库中。

通过将Maven构建文件(pom.xml)和ant构建文件(build.xml)导入Gradle构建文件(build.gradle),还支持Gradle。

默认情况下,Gradle支持以下配置:

实施

实施配置应视为默认配置。 我们使用它来声明我们不想暴露给使用者的编译时的依赖项。 引入此配置是为了替换已弃用的编译配置,以避免污染使用者的编译时,而实际上我们不想暴露这些依赖。

a)Gradle将依赖项添加到编译类路径中,并将该依赖项打包到生成输出中。 但是,当您的模块配置实现依赖项时,它会让Gradle知道您不希望该模块在编译时泄漏对其他模块的依赖项。 即,该依赖关系仅在运行时可用于其他模块。

b)使用此依赖项配置而不是API或编译(不建议使用)可以显着缩短构建时间,因为它减少了构建系统需要重新编译的模块数量。 例如,如果实现依赖项更改了其API,则Gradle仅重新编译该依赖关系以及直接依赖于该依赖关系的模块。 大多数应用程序和测试模块应使用此配置。

API

我们使用API​​配置确实声明了属于我们API的依赖项,即声明了我们明确希望暴露给使用者的依赖项。 这是唯一将依赖项暴露给使用者的编译时的标准配置。

a)Gradle将依赖项添加到编译类路径并生成输出。 当模块包含API依赖项时,它会让Gradle知道该模块希望将该依赖项可传递地导出到其他模块,以便它们在运行时和编译时都可用。

b)此配置的行为就像编译一样,但是您应谨慎使用它,并且仅应将需要的依赖项可传递地导出到其他上游使用者。 这是因为,如果API依赖项更改了其外部API,则Gradle会在编译时重新编译所有可以访问该依赖项的模块。 因此,拥有大量的API依赖关系会大大增加构建时间。 除非您希望将依赖项的API公开给单独的模块,否则库模块应该使用实现依赖项。

仅编译

使用compileOnly配置,可以声明仅在编译时才可用的依赖项,而在运行时不可用。 例如Project,Lombok是库,它在编译时修改字节码,并通过使用注释将更多方法添加到类中。 一旦生成了更新的字节码,就无需在类路径中显示字节码,因为这些类型的库将使用此配置。

仅运行时

Gradle仅将依赖项添加到生成输出中,以在运行时使用。 也就是说,它不会添加到编译类路径中。 例如,数据库驱动程序,我们曾在配置中指定驱动程序的类名,但并不需要在编译时显示,它仅在运行时有用。

注释处理器

要在作为注释处理器的库上添加依赖项,必须使用注释处理器配置将其添加到注释处理器类路径中。 这是因为使用此配置可​​以通过将编译类路径与注释处理器类路径分开来提高构建性能。 如果Gradle在编译类路径上找到注释处理器,则会停用编译回避,这会对构建时间产生负面影响(在编译类路径上找到5.0级及更高版本的忽略注释处理器)。

测试实施

与实现配置类似,测试实现配置用于指定在测试的编译和运行期间可用的依赖项。 例如,仅在编译或执行测试时才需要Junit和Mocking库。

testCompileOnly

与编译类似,仅依赖项仅在测试类编译时可用,而在测试运行时不可用。

testRuntimeOnly

类似于runtimeOnly,这些依赖项在执行测试时可用,但在测试编译时不可用。

以上都是默认情况下Gradle提供的配置,我们可以使用自定义配置,在自定义任务中指定这些自定义配置。 Gradle还支持配置中的继承。 我们可以使用配置中来自属性的扩展来指定基本配置。

configurations {testCompileOnly.extendsFrom compileOnly
}

所有完整的配置依赖项都将被复制到testCompileOnly Configuration,这将删除Gradle构建文件中的重复规范。

4. Gradle配置–结论

在当前博客中,我们了解了Gradle构建工具,并增加了Gradle相对于Maven,Ant构建工具的优势。 我们详细研究了Gradle配置,在其中如何指定每个配置级别的依赖项。

在本文中,我将描述您需要工程师利用Gradle注意Java Web应用程序的所有内容 。 我已经完成了无数的Java大冒险,而Gradle可以想象得到。 它提供快速的监督和运输。 利用Gradle轻松安排您的事业。

翻译自: https://www.javacodegeeks.com/gradle-configuration.html

gradle配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

removeAll throws java.lang.UnsupportedOperationException

【1】出现的问题&#xff1a; 如果该列表list 不支持 removeAll 方法的话&#xff0c; 就会抛出UnsupportedOperationException 【2】解决方法&#xff1a; List<String> list new ArrayList(Arrays.asList(new String[]{"C","B","D"})…

C#的float、double与decimal

float 单精度浮点 32bit&#xff0c;double 双精度浮点64bit&#xff0c;decimal是高精度 128bit&#xff0c;浮点型。 float double 是 基本类型&#xff08;primitive type&#xff09;&#xff0c;decimal不是。 float 有效数字7位&#xff0c;范围 1.5 10E−45 to 3.4 …

matlab支持 编程语言,用于数学的10个优秀编程语言

原标题&#xff1a;用于数学的10个优秀编程语言译文&#xff1a;http://www.codeceo.com/article/10-programming-language-for-math.html英文&#xff1a;10 Great Programming Languages for Mathematics翻译&#xff1a;码农网 – 小峰作为一个对数学和编程语言充满激情的人…

java锁_Java锁

java锁锁是一种线程同步机制&#xff0c;例如同步块。 锁是使用同步块在内部实现的。 因此&#xff0c;我们可以在Java中使用锁代替同步关键字。 锁比同步块更灵活&#xff0c;更复杂。 从Java 5版本开始&#xff0c;JDK提供了几种锁实现&#xff0c;例如ReentrantReadWriteLo…

java线程——阻塞队列

【0】README 0.1&#xff09;本文均转自两篇网络文章&#xff0c; 转载地址在转载处做了标记&#xff0c; 旨在理清 “阻塞队列”的相关知识 &#xff1b; 【1】转自&#xff1a; http://www.cnblogs.com/dolphin0520/p/3932906.html 1.1&#xff09;在前面我们接触的队列都是…

C#接口

接口是指定一组函数成员而不实现成员的引用类型&#xff0c;其他类型-类和接口可以实现接口。1. 接口是一个引用类型&#xff0c;通过接口可以实现多重继承。2. C#中接口的成员不能有new、public、protected、internal、private等修饰符。3. 接口中只能声明"抽象"成员…

消费者驱动的契约测试_告诉我们您想要什么,我们将做到:消费者驱动的合同测试消息传递...

消费者驱动的契约测试相当早以前&#xff0c;我们从REST&#xff08;ful&#xff09; Web API的角度讨论了消费者驱动的合同测试 &#xff0c;尤其是将其投射到Java&#xff08; JAX-RS 2.0规范&#xff09;的角度。 可以公平地说&#xff0c;至少在公共API方面&#xff0c; RE…

linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件

摘要: 作者&#xff1a;Syn良子 出处&#xff1a;http://www.cnblogs.com/cssdongl 转载请注明出处快速mark一下这个命令细节&#xff0c;免得以后使用又忘记了大家都知道可以用echo来输出内容到文件&#xff0c;比如 echo “hello,word”>> temp.txt那么我现在想把hadoo…

java线程——信号量(Semaphore)+障栅(CyclicBarrier)

【0】README 0.1&#xff09;以下内容转自网络&#xff0c;旨在理清 “java线程——信号量&#xff08;Semaphore&#xff09;障栅&#xff08;CyclicBarrier&#xff09;”的相关知识 【1】信号量 1.1&#xff09;信号量定义&#xff1a;从概念上讲&#xff0c;一个信号量管…

C#的foreach

一、foreach语句 C#的foreach 语句不会解析为IL 代码中的foreach 语句。 C#编译器会把foreach 语句转换为 IEnumerable 接口的方法和属性。 下面是一个简单的foreach 语句&#xff0c;它迭代数组中的所有元素&#xff0c;并逐个显示它们&#xff1a; foreach (A a in aas)…

linux中echo命令不输出换行,shell脚本echo输出不换行功能增强实例

这是第8/101个脚本There are as many ways to solve this quirky echo problem as there are pages in this book. One of my favorites is very succinct:function echon{echo "$*" | awk { printf "%s" $0 }}You may prefer to avoid the overhead incur…

java联接pg库_成为Java流大师–第5部分:将联接的数据库表转换为流

java联接pg库是否可以将联接的数据库表转换为Java Stream&#xff1f; 答案是肯定的。 由于我们已经多次提出这个问题&#xff0c;因此我们决定写另一篇动手实验文章&#xff0c;说明如何执行更高级的Stream Joins。 因此&#xff0c;这里是第六篇中的第五篇&#xff0c;后面还…

java线程——什么是线程?

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java线程——什么是线程&#xff1f; 的相关知识&#xff1b; 0.2&#xff09;线程定义&#xff1a;一个程序可以执行多个任务&#xff0c;每一个任务成为线程&a…

C#的类修饰符和成员修饰符

一、类修饰符 类修饰符&#xff1a;public、internal、 partial、abstract、sealed、static、new、protected、private、protected internal1、public&#xff1a;访问不受限制的&#xff0c;所有的本程序集以及其他的程序集里面的类都能够访问2、internal&#xff1a;本程序集…

linux 端口方法防火墙,Linux 打开端口方法(防火墙操作)

Linux防火墙操作(经测试部分命令无效)关闭防火墙:service iptables stop开启防火墙:service iptables start防火墙状态:service iptables status永久关闭:chkconfig iptables off永久开启:chkconfig iptables on方法一(命令):1. 开放端口命令&#xff1a; /sbin/iptables -I IN…

kafka 发布-订阅模式_使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

kafka 发布-订阅模式发布-订阅消息系统在任何企业体系结构中都起着重要作用&#xff0c;因为它可以实现可靠的集成而无需紧密耦合应用程序。 在解耦的系统之间共享数据的能力并不是一个容易解决的问题。 考虑一个企业&#xff0c;其中具有使用不同语言和平台独立构建的多个应用…

java线程——中断线程+线程状态+线程属性(优先级)

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java线程——中断线程线程状态线程属性&#xff08;优先级&#xff09; 的相关知识&#xff1b; 【1】中断线程 1.1&#xff09;当线程的run方法执行方法体中最…

C#的protected internal

关于C#的 protected internal&#xff0c;也许你在网上可以找到两种解释&#xff1a;第一种解释是&#xff0c;protected or internal &#xff0c;即在本程序集或其他程序集继承的子类可以访问。 第二种解释是&#xff0c;protected and internal&#xff0c;即在本类或本程序…

pae扩展内存 linux,浅析linux内核内存管理之PAE

浅析linux内核内存管理之PAE早期Intel处理器从80386到Pentium使用32位物理地址&#xff0c;理论上&#xff0c;这样可以访问4GB的RAM。然而&#xff0c;大型服务器需要大于4GB的RAM来同时运行数以千计的进程&#xff0c;近几年来这对Intel造成了压力&#xff0c;所以必须扩展32…

java线程同步——竞争条件的荔枝+锁对象

【0】README 0.1&#xff09; 本文描述转自 core java volume 1&#xff0c; 源代码为原创&#xff0c;旨在理解 java线程同步——竞争条件的荔枝锁对象 的相关知识&#xff1b; 0.2&#xff09; for full source code, please visit https://github.com/pacosonTang/core-ja…