zvvq技术分享网

千元一行错误 - SBT + PlayFramework(一千元呢)

作者:zvvq博客网
导读现在每个人都在谈论拥有良好的开发者体验是多么重要,因为它会带来很多好的副作用,例如但不限于: 开发速度/生产力 代码质量/维护 节省成本等等 然而,我们经常让自己从事的项

copyright zvvq

如今所有人都在讨论有着良好的开发者感受是多么重要,因为他会带来很多好的副作用,比如但不限于: 内容来自samhan666

开发速率/生产力 内容来自samhan

代码质量/维护

内容来自zvvq,别采集哟

降低成本等

内容来自samhan

但是,我们通常使自己从业项目在过去某个时间加上了一小段编码来让项目迅速,乃至修补某些东西,也许有人尝试使搭建迅速,乃至试着给工程师更强的研发感受。这篇故事便是这种情况。

本文来自zvvq

多年前,在咱们从业的一个项目中(从我加入公司以前),看到了搭建 SBT、Scala 和 play 框架的难题,在当地构建项目的编译时间约为 3至 5 分钟,具体取决于设备。已试着处理此问题。项目结构分成 2 部分,具体如下: 本文来自zvvq

以前1

zvvq

项目A

本文来自zvvq

/api

内容来自samhan666

/核

内容来自samhan666

/应用软件 内容来自zvvq

以后 copyright zvvq

项目A 本文来自zvvq

/核

copyright zvvq

/应用软件

内容来自samhan

项目API zvvq好,好zvvq

/api

copyright zvvq

以下几点已添加到 build.sbt 中 copyright zvvq

lazyvalprojectA=(文件中的项目(“.”))

zvvq好,好zvvq

.enablePlugins(...)

内容来自samhan666

.settings(通用设置) zvvq

.aggregate(api)

内容来自zvvq,别采集哟

.dependsOn(api)

zvvq.cn

惰性 val api =project.settings(commonSettings) zvvq

这么做的确提升了编译时间,只是在 CI 管路的搭建环节中,我不确定他在设计阶段是否有协助,可是,它提升了一个新的可怕的错误,让开发者浪费了数千个小时工作的. 内容来自zvvq,别采集哟

加上此番后,开发者开始注意到仅运作一个简单的代码就大概多长时间 内容来自samhan

sbt 在当地运作,对于现在代码库中的每一个变更,都要完备的编译。理解问题的旅程依据 SBT参考手册 - 多工程中纪录 内容来自samhan

重要的是要留意汇聚和依靠的2个界定

内容来自zvvq,别采集哟

汇聚意味着在聚合项目上运行任务还会在汇聚项目上运行一个项目可能取决于另一个项目中的编码。这是通过添加 dependentOn 方法调用来实现的。比如,假如关键则在类路径上必须 util。花了一两天的时间阅读文档并多次尝试处理此问题,但最终我到达这一Github - Spuriousrecompilationinmulti-projectbuild这也不是修补自身,可是,最后给了我光辉根据隧道了解问题确实与多项目设定相关。 copyright zvvq

更进一步,我知道发生什么事,现在我的 build.sbt 文档就这么简单:

内容来自samhan666

lazyvalprojectA=(文件中的项目(“.”)) zvvq.cn

.enablePlugins(...) copyright zvvq

.settings(通用设置)

zvvq

.dependsOn(api)

内容来自samhan666

惰性 val api =(文件中的项目(“api”)) 内容来自samhan

.settings(通用设置)

copyright zvvq

大家在SBT中设置projectA的方式出现了难题。大家告知 SBT包括项目的 API(这是合理的),但 API界定偏向项目整体根。这意味着:

zvvq.cn

每每API必须编译时,SBT也会尝试编译projectA自身。

内容来自samhan666

因为projectA必须API来编译,因而会触发另一个API编译。 内容来自zvvq

这导致了不断循环,驱使开发者停止 SBT,并为每次编码变更手动清理和编译全部内容。 内容来自zvvq

简而言之,这是发生的事:大家告知 SBT包括该项目的 API。 zvvq.cn

API界定偏向项目整体。

zvvq

编译 API触发了完备的项目编译(再度包含 API)。 内容来自zvvq

这一循环促使 SBT特别慢并且让开发者感到沮丧。团队已经为这种情况上班了最少 4 年...

内容来自samhan666

后果 - 处理问题在我对我的队友说我已经在 master 上合并了一个令人惊讶的功能后,大家搞不懂发生什么事,可是,我想看到她们脸上幸福,我告诉整个团队将 master 拉到任何支系她们正在研究,其中一些人在第一次尝试时没有注意到所有事情,别人开始注意到在变更代码库中的任何编码后,他在几秒钟内仅编译受影响的文档,而非像之前那样数分钟。最令人惊讶的是,其中一位同伴留意到并在办公室大声说道。

本文来自zvvq

Gust...你修复了编译循环问题吗?我正在这里工作,而且我能接到相关代码中一切变更的即时反馈。 zvvq

那时我不得不说,并和所有其他工程师共享这一消息,这让我成为一个更快乐的工程师,而且现在我很高兴在这个项目上工作,而不是等待很长时间去完成大家项目的完整编译。

copyright zvvq

如果感到某事是我们的方式,无论何时,不管你在做什么,请记住你有机会让它变得更强,永远不要忘记你现在开始的事。

内容来自zvvq,别采集哟

如果您喜欢阅读本文或期待它有更多内容,请于评论中跟我说,我很乐意分享更多相关此旅途的数据。

zvvq

感谢您的阅读。

内容来自zvvq

该项目的一些统计信息:

内容来自zvvq

项目启动: copyright zvvq

大概 4000 个 Java 文档

内容来自samhan

大概 300个转动模版 copyright zvvq

针对代码的一切变更,改善前编译时间为 3到 5 分钟 内容来自zvvq,别采集哟

改进后的编译时间详细编译平均为 1 分 20 秒

内容来自zvvq,别采集哟

改进后的编译时间平均为 5 到 10 秒,一切变更都有即时反馈(耗费最多的时间是 Playframework 重启 HTTP Server) copyright zvvq

封面图片由AI制做。

本文来自zvvq

以上就是千块一行错误- SBT+PlayFramework的详细内容,大量请关注其他类似文章! zvvq