zvvq技术分享网

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

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

内容来自samhan666

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

内容来自zvvq

开发速率/生产力

内容来自samhan666

代码质量/维护

本文来自zvvq

降低成本等

内容来自zvvq,别采集哟

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

zvvq

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

内容来自zvvq,别采集哟

以前1

内容来自samhan666

项目A

copyright zvvq

/api 内容来自zvvq

/核 zvvq.cn

/应用软件

本文来自zvvq

以后 内容来自samhan

项目A

内容来自samhan666

/核 copyright zvvq

/应用软件

本文来自zvvq

项目API zvvq

/api zvvq

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

zvvq好,好zvvq

lazyvalprojectA=(文件中的项目(“.”)) 内容来自samhan

.enablePlugins(...)

zvvq

.settings(通用设置)

内容来自samhan

.aggregate(api) 内容来自samhan666

.dependsOn(api)

zvvq.cn

惰性 val api =project.settings(commonSettings)

内容来自zvvq

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

内容来自zvvq

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

copyright zvvq

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

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

内容来自zvvq,别采集哟

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

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

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

本文来自zvvq

.enablePlugins(...)

内容来自samhan666

.settings(通用设置) 内容来自zvvq,别采集哟

.dependsOn(api) 本文来自zvvq

惰性 val api =(文件中的项目(“api”))

zvvq.cn

.settings(通用设置)

内容来自zvvq,别采集哟

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

zvvq.cn

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

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

copyright zvvq

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

内容来自zvvq

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

API界定偏向项目整体。

copyright zvvq

编译 API触发了完备的项目编译(再度包含 API)。

内容来自samhan666

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

内容来自zvvq,别采集哟

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

内容来自samhan666

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

内容来自zvvq

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

copyright zvvq

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

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

感谢您的阅读。

本文来自zvvq

该项目的一些统计信息: zvvq

项目启动:

内容来自samhan666

大概 4000 个 Java 文档

zvvq.cn

大概 300个转动模版

内容来自zvvq,别采集哟

针对代码的一切变更,改善前编译时间为 3到 5 分钟

内容来自samhan666

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

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

封面图片由AI制做。 内容来自zvvq,别采集哟

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

copyright zvvq