前言

Gradle作为一款基于Groovy语言的构建工具,已经吸引众多的ant,maven使用者转投gradle的怀抱,和Gradle相比,ant显得冗余复杂,maven显得有些死板落后,而gradle基于DSL语法,特点明显:简洁、灵活、可读性强。

背景

♦ Maven 的软件代码由 Apache 基金会维护。而基础设施主要由 Sonatype、JFrog 两家企业维护,他们分别提供 Nexus 和 Artifactory 两大 artifact 管理体系,维护 Central 与 JCenter 两大公共仓库,并提供收费的企业服务(咨询、培训、认证、定制开发、云服务、高级管理工具)。

♦ Gradle 则是由 Gradle Inc. 维护,该企业也提供收费的 Gradle Enterprise 解决方案。

首先要说的是我们用的 Gradle 来作为我们的构建工具,所以主要是针对 Gradle 的命令来作了一些优化。

1、修改 gradle build 的参数

  • 使用 --build-cache

什么是 build cache(构建缓存),在 Gradle 中,每一个待编译的工程叫 Project,每一个 Project 在构建时都包含一系列的 task。

每个 task 的输入都可以作为下一个 task 的输出,build cache 做的事就是把可以缓存(注:并不是所有的 task 输出都能缓存)的 task 输出都缓存住,这样在构建过程中,如果发现这个 task 的输入不变,就没必要重新执行任务了,直接从 task ouput 缓存里拿即可,如下图示,Build 2 的构建输入直接从 Build Cache 中拿,这样 Build 1 就不用构建了。

效果怎么样呢,看下图,下面图分别显示了 Gradle 持续集成时使用构建缓存和不使用构建缓存两种情况下的聚合的构建时间,可以看到使用了 cache 的 Gradle 构建速度明显快于不使用 cache 的情况。

更骚的是这个 Buiid Cache 支持分布式的,可以统一把这些 cache 丢到一台机器上,本地机器要编译时统一去这台机器拉 cache,这样如果我们切换分支时执行构建也能用 Build Cache 来加快构建速度。

--build-cache 的具有使用需要注意一些事项,比如得 Gradle 4.3 以上才有效,建议大家直接去官网查查看。

  • 增加 --parallel 参数

并行执行在多项目编译的项目中能有效提升编译的速度,但是并行执行的前提是每个项目已经被模块化,每个项目之间没有耦合。

  • 移除 --refresh-dependencies 参数

原来 gradle build 有加这个参数,这个参数会忽略缓存,强制重新下载,显然是编译的瓶颈。

2、任务并行

原来 Jenkins 中执行 Gradle 编译任务,每个 Task 是串行执行的,总编译耗时是每个任务执行时间的总和。

现在把它改成了并行的

显然并行执行会快得多。

3、将大项目工程中的常用代码抽成 jar 包

对于业务方来说,采用这种方式也是提升编译速度的有效手段 ,将大量代码抽成 jar 包,意味着它们本身就是字节码了,在 gradle build 时就不用编译啦。自然能提升整个工程的编译打包时间。

总结

如果你 Gradle 用得越多,越能体会到这种理念上的差异。

  • Maven 作为一个依赖管理工具而诞生,对于它上层的商业形态而言,这个工具只是基础之一,这不影响它的工具属性;
  • Gradle 作为一个构建工具而诞生,它的商业形态围绕着这个核心而展开,这影响它的工具属性。

Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的相关推荐

  1. 【错误记录】Android Studio 编译报错 ( Invalid Gradle JDK configuration found )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译时提示 Invalid Gradle JDK configuration found 错误 ; 一般是打开一个新的 ...

  2. Invalid Gradle JDK configuration found_build.gradle里dependencies标签页的实现原理

    build.gradle里的dependencies标签页: 如果把dependencies改成dependencies2, gradle build的输出会遇到错误消息: > A proble ...

  3. 【已解决】找到无效的 Gradle JDK 配置(invalid Gradle JDK configuration found)

    新的处理方式是等10分钟左右,什么也不用做,等新安装的Android Studio处理完一些事情就好了; 以下是旧的处理方法: 去 https://jdk.java.net/ 下载解压open jav ...

  4. Android Studio 打开提示Invalid Gradle JDK configuration found错误

    解决方案删除一下文件: .idea/gradle.xml .idea/workspace.xml

  5. java.lang.RuntimeException: Invalid action class configuration that references an unknown class name

    java.lang.RuntimeException: Invalid action class configuration that references an unknown class name ...

  6. CRS-4046: Invalid Oracle Clusterware configuration

    在AIX6.1下安装ORACLE11.2.0.4 RAC的时候,在节点2执行root.sh报错如下: [root@oratest02:/oracle/]#sh /oracle/app/11.2.0/g ...

  7. Gradle介绍1-入门和IDEA整合(Gradle Wrapper)

    1. Gradle 入门 1.1.Gradle 简介 Gradle 是一款Google 推出的基于 JVM. 通用灵活的项目构建工具, 支持 Maven,JCenter 多种第三方仓库;支持传递性依赖 ...

  8. 【转载】Gradle学习 第十一章:使用Gradle命令行

    转载地址:http://ask.android-studio.org/?/article/94 This chapter introduces the basics of the Gradle com ...

  9. 学习笔记 - 5步理解Gradle. How build execution is controlled by gradle tasks?

    https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:projects_and_tasks https://d ...

最新文章

  1. 程序员新手第一个python web开发框架
  2. 多线程:线程同步的几种方式
  3. 利用 Laravel 花 2 小时撸一个 RSS 生成器
  4. [Python学习] 专题四.文件基础知识
  5. Linux对包管理阐述
  6. 项目中常用正则(手机号、身份证、金额等)
  7. Vue之非单文件组件介绍
  8. 使用string定义一个变量如何输出
  9. 逆向工程-ARM程序
  10. 不能使用zsh或myzsh创建/切换 包含#的分支名(zsh: bad pattern: #xxx)
  11. 计算机网络实验【常见网络测试命令的使用】
  12. Linux下vsftpd的安装,Java上传文件实现。
  13. 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...
  14. C++案例——联系人管理系统
  15. 我想转行IT,想找一个培训机构,目前看了优就业、千峰、叩丁狼、黑马、达内等机构,请问哪个好一点?
  16. mysql 1556_mysqldump: Got error: 1556: You can't use locks with log tables. when doing LOCK TABLES
  17. 解决ubuntu开机变慢;删除耗时启动项
  18. cas112-79-4/中介四(3-羟基苯基)卟吩/5,10,15,20-四(3-羟基苯基)卟啉/MESO-四(间-苯酚)卟啉/3,3‘,3‘‘,3‘‘‘-(卟啉-5,10,15,20-四基)四酚
  19. 游戏建模小白必看的游戏人物模型贴图制作方法及制作小技巧
  20. 【pytorch】torchvision.transforms 图像的变换详解;图像的预处理;数据增强

热门文章

  1. 使用IntelliJ调试Java流
  2. Jib –为Spring Boot应用程序构建docker映像
  3. 可重入锁 不可重入锁_什么是可重入锁?
  4. 使用JUnit 5在Mockito中方便地进行模拟–官方方式
  5. 数据聚合Spring Data MongoDB:嵌套结果
  6. 使用Boxfuse轻松在云中运行Spring Boot应用程序
  7. kickstart_具有Java Kickstart的MongoDB
  8. 在Java中避免空检查
  9. 仔细看看,您会发现需要改进的地方
  10. OutOfMemoryError:无法创建新的本机线程–问题神秘化