热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将一个非常大的Gradle项目与大量子项目分开的指南,使GradleBuildFaster和IntelliJGradleRefresh更快

如何解决《将一个非常大的Gradle项目与大量子项目分开的指南,使GradleBuildFaster和IntelliJGradleRefresh更快》经验,为你挑选了1个好方法。

我有一个非常大的git项目,我有一个大的单个build.gradle定义子项目..在最初的几年......没问题.在最初几年之后,由于子项目的数量,它在Gradle命令行配置步骤中变得缓慢.

例如,当我运行gradle命令时,我看到暂停: > Configuring > 0/77 projects >...

每个项目添加似乎都会暂停.

另一个大问题是当我去导入项目或使用intelliJ刷新gradle deps时,"分析依赖关系"需要很长时间才能真正延迟开发,因为我们需要在每次同步依赖项时都有相当大的等待.

人们通常会在这个领域做些什么来通过这个?我不得不吃掉那种痛苦的延迟.

人们通常会将build.gradle文件拆分为不相关的块,以便您获得多项目构建的网络吗?或者应该有办法让那不是那么慢?

我已经分析了依赖关系,实际上非常简单.

按需,守护进程和并行部署以某种有限的方式发生.

但同样的问题是......

还有其他什么技巧?我的计划是将我的代码的主要部分分开并单独加载它们,以便gradle命令和intelliJ刷新是较小的UP-TO-DATE检查和配置设置.如果我们不必因为子项目限制而拆分build.gradle文件,那就太好了.



1> Ben Green..:

在我们对您的问题的评论进行讨论之后,很明显您不希望沿着将某些接口jar发布到存储库以删除某些子项目的路线.

鉴于此,这里有一些建议.我知道你已经尝试了其中的一些,但是这里有一些你上面没有提到的可能会对你有所帮助:

分析和干运行

首先,尝试使用以下命令:

    ./gradlew {task} --dry-run --profile

这将使用名称执行任务的干运行{task}并在其下创建配置文件html文件$buildDir/reports/profile.您可以使用它来查看哪些任务占用了大部分时间,而不是通过配置,依赖项解析和任务执行.如果您可以看到一项任务需要花费很长时间,请查看它并查看是否可以减少该任务中发生的事情.

按需配置

要减少配置时间,请尝试在文件中启用按需配置,gradle.properties如下所示:

    org.gradle.cOnfigureondemand=true

这意味着gradle将尝试仅配置运行任务所需的必要项目,而不是配置所有内容.

使用gradle守护程序

gradle守护程序是一个后台进程,当您的gradle任务完成时它不会退出,并且可以重复使用.这限制了每次构建时启动新gradle jvm进程的开销.要激活gradle守护程序,请将以下行添加到您的gradle.properties文件中:

    org.gradle.daemon=true
使用最新版本的Gradle和Java

有些事情很简单,因为升级gradle版本可以提高速度.如果您尚未升级一段时间,或者使用相当旧的版本,请考虑升级.升级可能会有一些初步的痛苦,但从长远来看它是值得的.这同样适用于升级java版本.显然,由于其他限制,这并不总是可行,但请尝试使用最新的Java版本.

避免使用动态依赖项

Gradle允许您指定项目能够使用的依赖项的范围,如下所示:

dependencies {
    compile "commons-lang:commons-lang:2.+"
}

这意味着gradle将始终尝试查找与约束匹配的最新版本的依赖项.这种灵活性会带来性能成本,因为gradle必须联机以检查要使用的版本.出于这个原因,以及其他一些我不会在这里讨论的内容,最好明确指定依赖的版本.

并行化构建

这允许并行构建不相关的子项目,从而加快构建过程.要启用此功能,请在以下位置设置gradle.properties:

org.gradle.parallel=true
忽略不相关的任务

假设您要进行构建,但不一定要再次运行所有测试.您可以运行以下任务,并且不会运行测试任务.这可以显着增加构建时间:

./gradlew build -x test

编辑 - 经过一些进一步的研究,在找到答案之后,我有了进一步的建议.

使用属性禁用构建的部分

如链接问题所示,如果您有一个项目而您只想在某些情况下运行功能测试,则可以将以下内容添加到根build.gradle文件中:

project('functional-tests') {
test {
    onlyIf {
        project.hasProperty("functionalTests")
    }
}

}

这意味着只有在运行如下任务时才会运行功能测试:

./gradlew test -PfunctionalTests
禁用settings.gradle中的某些子项目

您也可以禁用某些子项目,如下settings.gradle所示:

if (someBoolean) {
    include 'functional-tests'
}


推荐阅读
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • JDK IDEA的安装卸载基本使用
    一、JDK下载地址官网https:www.oracle.comjavatechnologiesjavase-downloads.html没有账号可以使用:https:blog ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
author-avatar
_雁火漫天_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有