为什么不在所有的Android应用中添加mavenLocal()?

4
创建一个全新的Android项目时,Android Studio并不会将mavenLocal()添加到Gradle仓库列表中。但我们已经添加了它,现在构建速度比以往任何时候都要快。

是否有任何理由避免在每个Android项目中添加mavenLocal()?我的意思是,这样做是否有任何缺点?


“构建速度比以往任何时候都更快”-- 可能是因为您在本地Maven存储库中安装了一些之前从网络中获取的依赖项。这是不寻常的,如果您不维护该本地Maven存储库,则在将依赖项版本提升到您未在本地复制的版本时,您将会回退到网络。 - CommonsWare
@CommonsWare,没错,但仅限第一次,因为它将被添加到缓存中,并在下一次从那里使用。 - Sergi and Replace
@SergiandReplace:同意,但Gradle的缓存不是mavenLocal()。这就是为什么我对构建性能改进的说法持怀疑态度的原因。 - CommonsWare
@CommonsWare 看起来 Gradle 对存储库进行了 HEAD 检查。因此,如果网络不好,则在没有 mavenLocal() 的情况下会影响构建时间。实际上,我不知道其内部运作方式...这就是为什么我尝试弄清楚发生了什么。 - Roc Boronat
据我所知,Gradle每天每个依赖项只进行一次HEAD检查。 - CommonsWare
2
顺便说一句。https://dev59.com/yVwY5IYBdhLWcg3w4LE3 - OneCricketeer
2个回答

1
如果您没有本地的.m2存储库,会怎样呢?
实际上,mavenLocal() 会将您的 .m2 添加到 Gradle 存储库中。
Gradle 有自己的 ivy 缓存,当您迁移项目或使用一些常见的依赖项时,它可能已经下载了所有依赖项,因此将 maven 本地存储库添加到 Gradle repositories 中可以使新项目更快,因为它不需要再次下载它们到本地缓存。
我个人会将其放在那里,因为我有一些 maven 和一些 Gradle 项目,是的,它可以加速构建,并且不会使用太多空间来存储多个项目的重复依赖项。但我也认为,如果您不使用 maven,则应让 Gradle 管理其依赖项。

不知道。使用Gradle时,.m2缓存似乎会自动生成,是这样吗?我不记得在我现在使用的计算机上安装过Maven。顺便说一句,根据你的回答,你认为没有任何理由删除mavenLocal()吗?那么,为什么Google不默认添加mavenLocal()呢? - Roc Boronat
@RocBoronat 我并没有说没有理由删除它,个人而言我会保留它,因为我有一些 Maven 和一些 Gradle 项目,是的,它可以加速构建,并且我不需要在我的 SDD 上为多个项目保留重复的依赖项。但我也认为,如果你不使用 Maven,你应该让 Gradle 管理它的依赖关系。 - LazerBanana
好的 @LazerBanana,谢谢你的澄清!:·)我会保留 mavenLocal()。看起来它并没有做坏事。所以...听起来不错:·) - Roc Boronat

0

我认为@LazerBanana已经指出了问题。

除此之外,我还想提到现今每个人都采用的持续集成实践。这是另一件我们不应该使用mavenLocal()的事情,因为它会使构建依赖于机器。


但是,如果您使用的不是快照构件,那只会加速构建,对吧? - Roc Boronat
是的,快照也应该发布到Nexus(或其他jar分发器)。我不反对添加mavenLocal()来加速构建,我只是认为构建在不同机器上不可重复。 - chenrui
哦,好的!谢谢 @chenrui 的澄清!:·) - Roc Boronat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接