千元一行错误 – SBT + PlayFramework

千元一行错误 - sbt + playframework

现在每个人都在谈论拥有良好的开发者体验是多么重要,因为它会带来很多好的副作用,例如但不限于:

开发速度/生产力

代码质量/维护

节省成本等等

然而,我们经常让自己从事的项目在过去的某个时间添加了一小段代码来使项目更快,甚至修复某些东西,也许有人试图使构建更快,甚至尝试给工程师更好的开发体验。这个故事就是这种情况。

几年前,在我们从事的一个项目中(在我加入公司之前),发现了构建 SBT、Scala 和 play 框架的问题,在本地构建项目的编译时间约为 3至 5 分钟,具体取决于机器。已尝试解决该问题。项目结构分为 2 部分,如下所示:
之前

项目A  /api /核 /应用程序

之后

项目A /核 /应用程序项目API  /api

以下内容已添加到 build.sbt 中

lazy val projectA =(文件中的项目(“.”))  .enablePlugins(...)  .settings(通用设置)  .aggregate(api)  .dependsOn(api)惰性 val api = project.settings(commonSettings)

这样做确实提高了编译时间,只是在 CI 管道的构建过程中,我不确定它在开发阶段是否有帮助,但是,它增加了一个新的可怕的错误,让开发人员浪费了数千个小时工作的.

添加此行后,开发人员开始注意到仅运行一个简单的代码就需要多长时间
sbt 在本地运行,对于现在代码库中的每一个更改,都需要完整的编译。

理解问题的旅程

根据 SBT 参考手册 – 多项目中记录

重要的是要注意聚合和依赖的两个定义

聚合意味着在聚合项目上运行任务也会在聚合项目上运行一个项目可能依赖于另一个项目中的代码。这是通过添加 dependentOn 方法调用来完成的。例如,如果核心在其类路径上需要 util。

花了一两天的时间阅读文档并多次尝试解决该问题,但最终我到达了这个 Github – Spurious recompilation in multi-project build 这并不是修复本身,但是,在最后给了我光明通过隧道了解问题确实与多项目设置有关。

更进一步,我明白发生了什么,现在我的 build.sbt 文件就这么简单:

lazy val projectA =(文件中的项目(“.”))  .enablePlugins(...)  .settings(通用设置)  .dependsOn(api)惰性 val api =(文件中的项目(“api”))  .settings(通用设置)

我们在SBT中设置projectA的方式出现了问题。我们告诉 SBT 包含项目的 API(这是正确的),但 API 定义指向整个项目根。这意味着:

每当API需要编译时,SBT也会尝试编译projectA本身。
由于projectA需要API来编译,因此会触发另一个API编译。
这造成了无限循环,迫使开发人员终止 SBT,并为每次代码更改手动清理和编译所有内容。
简而言之,这是发生的事情:

我们告诉 SBT 包含该项目的 API。
API定义指向整个项目。
编译 API 触发了完整的项目编译(再次包括 API)。
这个循环使得 SBT 非常慢并且让开发者感到沮丧。

团队已经为这个问题工作了至少 4 年……

挖错网 挖错网

一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。

挖错网 28 查看详情 挖错网

后果 – 解决问题

当我对我的队友说我已经在 master 上合并了一个令人惊讶的功能后,人们不明白发生了什么,但是,我想看到他们脸上的幸福,我告诉整个团队将 master 拉到任何分支他们正在研究,其中一些人在第一次尝试时没有注意到任何事情,其他人开始注意到在更改代码库中的任何代码后,它在几秒钟内仅编译受影响的文件,而不是像以前那样几分钟。最令人惊讶的是,其中一位队友注意到并在办公室大声说道。

Gust …你修复了编译循环问题吗?我正在这里工作,并且我会收到有关代码中任何更改的即时反馈。

当时我不得不承认,并与所有其他工程师分享这个消息,这让我成为一个更快乐的工程师,因为现在我很高兴在这个项目上工作,而不是等待很长时间来完成我们项目的完整编译。

如果你觉得某件事是我们的方式,无论何时,无论你在做什么,请记住你有机会让它变得更好,永远不要忘记你已经开始的事情。

如果您喜欢阅读这篇文章或希望它有更多内容,请在评论中告诉我,我很乐意分享更多有关此旅程的信息。

感谢您的阅读。

该项目的一些统计数据:

项目启动:

大约 4000 个 Java 文件

大约 300 个旋转模板

对于代码的任何更改,改进前的编译时间为 3 到 5 分钟

改进后的编译时间完整编译平均为 1 分 20 秒

改进后的编译时间平均为 5 到 10 秒,任何更改都有即时反馈(花费最多的时间是 Playframework 重新启动 HTTP Server)

封面图片由AI制作。

以上就是千元一行错误 – SBT + PlayFramework的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/519671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 04:49:26
下一篇 2025年11月9日 04:53:40

相关推荐

  • TikTok视频无法下载怎么办 TikTok视频下载异常修复方法

    先检查链接格式、网络设置及工具版本。复制以https://www.tiktok.com/@或vm.tiktok.com开头的链接,删除?后参数,尝试短链接;确保网络畅通,可切换地区节点或关闭防火墙;更新工具至最新版,优先选用yt-dlp等持续维护的工具。 遇到TikTok视频下载不了的情况,别急着换…

    2025年12月6日 软件教程
    000
  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月6日 web前端
    000
  • VSCode性能分析与瓶颈诊断技术

    首先通过资源监控定位异常进程,再利用开发者工具分析性能瓶颈,结合禁用扩展、优化语言服务器配置及项目设置,可有效解决VSCode卡顿问题。 VSCode作为主流的代码编辑器,虽然轻量高效,但在处理大型项目或配置复杂扩展时可能出现卡顿、响应延迟等问题。要解决这些性能问题,需要系统性地进行性能分析与瓶颈诊…

    2025年12月6日 开发工具
    000
  • VSCode插件:GitLens使用详解

    GitLens是VSCode中强大的Git增强插件,提供行级代码追踪、提交历史浏览、版本对比、跨文件导航及与GitHub等平台集成;通过启用Current Line Blame和In-Line Blame,可实时查看每行代码的作者与修改时间;支持按分支、作者过滤提交记录,比较差异,并利用Go Bac…

    2025年12月6日 开发工具
    000
  • mysql如何备份存储过程和函数

    最直接且推荐的方式是使用mysqldump工具并添加–routines参数,可完整导出存储过程和函数;若需跨版本迁移,应结合–triggers、处理DEFINER用户、验证SQL_MODE,并在测试环境充分验证恢复与兼容性。 MySQL备份存储过程和函数,最直接且推荐的方式是…

    2025年12月6日 数据库
    000
  • VSCode界面优化:精简布局与元素

    通过隐藏冗余组件和调整视觉元素可提升VSCode专注度。依次操作:1. 用Ctrl+B和Ctrl+J快捷键或设置隐藏侧边栏与面板;2. 在设置中关闭活动栏显示,并在settings.json中设置”window.titleBarStyle”: “inline&#8…

    2025年12月6日 开发工具
    000
  • JavaScript持续集成与部署

    持续集成与部署(CI/CD)通过自动化测试、构建和部署提升JavaScript项目交付效率。1. CI指频繁合并代码并自动运行测试以快速发现错误;2. CD在CI通过后自动将应用部署至生产环境;3. 常用工具包括GitHub Actions、GitLab CI/CD、CircleCI和Jenkins…

    2025年12月6日 web前端
    000
  • 谷歌浏览器标签页分组颜色怎么修改_谷歌浏览器标签分组个性化设置指南

    可通过右键菜单、拖拽建组或扩展程序修改谷歌浏览器标签分组颜色。首先右键分组圆点选新颜色;其次拖动标签创建分组时选择配色;最后可用“Tab Modifier”等扩展按规则自动着色。 如果您在使用谷歌浏览器时创建了标签页分组,但希望调整其颜色以便更好地区分不同任务或项目,则可以通过内置功能直接修改。以下…

    2025年12月6日 电脑教程
    000
  • 如何管理和同步VSCode的扩展配置,以便在新设备上快速恢复开发环境?

    使用 Settings Sync 是最快方式,通过 GitHub 账号同步扩展、设置、快捷键和代码片段;也可手动导出扩展列表(code –list-extensions > extensions.txt)并在新设备安装,结合备份 settings.json 等配置文件实现环境快速恢…

    2025年12月6日 开发工具
    000
  • 键盘背光模式设置

    键盘背光设置需根据设备类型选择方法:1. 先了解支持的背光模式,如常亮、呼吸、波浪等;2. 多数键盘可通过Fn组合键快捷切换亮度或模式,具体按键因品牌而异;3. 品牌机械键盘建议使用官方软件(如iCUE、Synapse)进行精细自定义;4. 笔记本通常用Fn加功能键调节,部分可在系统或厂商工具中设置…

    2025年12月6日 电脑教程
    000
  • VS Code扩展生态剖析:API设计与商店发布全流程指南

    VS Code扩展成功源于其插件化架构与丰富API。通过Activation Events、Contribution Points和Extension Host实现高效稳定的功能扩展,结合vscode.commands、languages、window、workspace等核心API提供完整开发支持…

    2025年12月6日 开发工具
    000
  • VSCode时间线:文件修改历史与代码追溯系统

    时间线功能是VSCode内置的代码追溯工具,通过整合Git历史记录提供文件修改的时间轴视图。用户可查看提交哈希、作者、时间、提交信息及变更行数,点击记录预览差异并还原版本。该功能依赖Git仓库,支持查看某行修改者、对比历史版本、恢复误删代码等操作,未启用Git时仅显示本地保存点。结合GitLens等…

    2025年12月6日 开发工具
    000
  • 蛐蛐 (QuQu)— 开源的桌面端语音输入与文本处理工具

    蛐蛐 (QuQu)是什么 蛐蛐(ququ)是一款专为中文用户打造的桌面语音输入与文本处理工具,旨在提供一个开源且免费的 wispr flow 替代方案。该工具集成了阿里巴巴的 funasr paraformer 模型,支持本地化部署与运行,有效保障用户隐私安全。同时融合先进 ai 技术,实现高精度语…

    2025年12月6日 科技
    000
  • VS Code源代码管理:变更跟踪与分支可视化操作解析

    VS Code内置Git功能提升开发效率:通过源代码管理视图实时跟踪文件变更,支持差异对比与部分暂存;借助Git图表可视化分支演进,直观管理提交历史;整合拉取、推送、分支切换等常用操作,简化协作流程。 VS Code 内置的源代码管理功能让开发者可以直接在编辑器中高效处理 Git 变更与分支操作,无…

    2025年12月6日 开发工具
    000
  • 数毛社实测PS5节能省电模式:功耗暴降55%

    近日,著名技术评测机构数毛社(digital foundry)对ps5最新系统固件中引入的“省电模式”展开深入实测。结果显示,虽然该功能对当前主机用户的实际意义较为有限,但其背后的技术方向或许正为索尼下一代便携式ps6设备铺路。 实机测试: 本次测试选用了两款已适配省电模式的游戏作品——《恶魔之魂》…

    2025年12月6日 游戏教程
    000
  • 美团 LongCat 团队发布 LongCat-Video 探索世界模型

    美团longcat团队近日正式推出全新视频生成模型longcat-video,致力于通过视频生成技术路径深入探索“世界模型”的构建,为自动驾驶、具身智能等前沿应用场景提供坚实的技术支撑。 该模型基于DiT(Diffusion in Time)架构设计,创新性地以“条件帧数量”作为任务区分标准,原生支…

    2025年12月6日 行业动态
    000
  • 探索VSCode云端开发环境搭建与配置方案

    首选GitHub Codespaces实现便捷云端开发,其次通过VSCode+SSH连接云服务器提升控制权,或采用Dev Containers确保环境一致性,结合性能优化与安全措施,满足不同场景下的高效协作需求。 在现代开发场景中,将VSCode与云端环境结合已成为提升协作效率、实现跨设备开发的重要…

    2025年12月6日 开发工具
    000
  • PHP/HTML代码格式化工具实践:以PHP-CS-Fixer为例

    本文针对php和html代码的自动化格式化需求,推荐并详细介绍了php-cs-fixer工具。它不仅能检查代码标准,还能自动修复格式问题,支持自定义规则集和ci/cd集成,是确保团队代码风格一致性的高效解决方案。通过本文,您将了解其安装、配置、使用及在持续集成环境中的应用。 在现代软件开发流程中,代…

    2025年12月6日 后端开发
    000
  • VSCode智能补全:配置基于AI的代码建议与自动完成功能

    首先安装 GitHub Copilot 插件并登录账号,启用内联建议与快捷设置,通过清晰命名和注释提升补全准确率,审查生成代码并提交反馈以优化模型,从而显著提升编码效率。 VSCode 的智能补全功能可以通过集成基于 AI 的工具显著提升编码效率。目前最成熟且广泛使用的 AI 驱动代码补全是 Git…

    2025年12月6日 开发工具
    000
  • php新手怎么找工作_PHP新手求职方向、平台选择与实战建议

    答案是通过项目证明能力并主动拓展求职渠道。先做PHP+MySQL项目如商城后台,发布到GitHub并写好README;再从小公司需求、技术社区、开源项目中找机会;面试时重点准备PHP基础、MySQL操作和项目讲解,突出解决问题的能力。 刚学完PHP怎么找工作?这是很多新手都会问的问题。答案其实不复杂…

    2025年12月6日 后端开发
    000

发表回复

登录后才能评论
关注微信