intellij/activator/sbt 正在下载其他之前下载的依赖项

Posted

技术标签:

【中文标题】intellij/activator/sbt 正在下载其他之前下载的依赖项【英文标题】:intellij/activator/sbt are downloading dependencies previously downloaded by the other 【发布时间】:2015-09-16 17:31:50 【问题描述】:

我不是 sbt 专家,所以我的问题可能有点菜鸟,但我注意到,当我创建项目并使用 sbt 下载其依赖项时,如果我使用 intellij 打开项目,所有依赖项都是再次重新下载,同样的情况发生在 inverse orden intellij->sbt 和 activator..

我对 sbt 的(较差的)知识比这使用 ivy 和依赖项下载在 ~/.ivy2/ 文件夹中......这是 sbt 下载我的 deps 的地方,但似乎比 intellij 正在使用其他文件夹。

我个人不会使用太多的激活器,但我想配置 sbt 和 intellij 以使用相同的 ivy 路径...

2)最近我使用 sbt +publishLocal 将 finagle-postgre 发布到我的本地常春藤,我可以检查我的常春藤文件夹

 /home/yo/.ivy2/local/com.twitter/finagle-postgres_2.11/0.1.0-SNAPSHOT

但不幸的是 intellij 无法解决此依赖关系,我尝试将此行添加到我的构建中

 resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)

但似乎不起作用

3) 下载依赖的路径与使用的sbt-launch.jar文件有关吗?我怎么知道现在什么 sbt-lauch.jar 文件正在使用 sbt...

谢谢大家!

【问题讨论】:

您可以在项目本地.sbtopts 文件下设置本地常春藤仓库的路径...默认为~/.ivy2,但如果您将其设置为~/.ivy2/local,您需要为您的构建更新它〜See Default 【参考方案1】:

如果我们谈论的是 IntelliJ 在 SBT/Activator 已下载工件后似乎在下载工件,那么事实证明这可能只是 IntelliJ 正在下载 源代码 - 它不是重新下载二进制工件,只是伴随它们的源工件。

当您查看Background Tasks 弹出窗口中的Refreshing SBT project 任务时,这并不明显,因为完整的下载路径被截断,所以您会看到如下内容:

[info] downloading https://repo1.maven.org/maven2/org/apache/httpcompo...

.. 很自然地假设这是您在控制台上看到 SBT 下载的同一个二进制工件,但是如果您查看完整日志(转到 Help -> Show Log in files 并打开sbt.last.log 在文件浏览器中)。

您会看到下载的唯一工件以 -sources.jar 结尾:

$ grep repo1.maven.org /home/roberto/.IntelliJIdea2016.3/system/log/sbt.last.log 
[info] downloading https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/org/pegdown/pegdown/1.2.1/pegdown-1.2.1-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3-sources.jar ...

```

如果您在执行Import project 时没有选中Sources 复选框,则不会发生这些源下载。

使用 IntelliJ 2016.3.5 和 Scala 插件 v2016.3.9 测试

【讨论】:

+1;这符合我的经验。 IntelliJ 和 SBT 在我的机器上共享一个 deps 缓存,但默认情况下 SBT 不获取源,而 IntelliJ 为我做。【参考方案2】:

首先,激活器只是 SBT 本身的启动器,因此行为应该没有区别。

其次,如果您没有另行说明,IntelliJ 也会默认使用 ~/.ivy2 中的文件(例如通过设置 SBT_OPTS 环境变量,但这取决于您的 IntelliJ 版本)。

如果您使用不同的 scala 版本(例如 2.10.x 与 2.11.x),而您没有在项目中明确设置 scalaVersion,则可能会导致差异。然后,每个工具都会为它默认配置的相应 scala 版本下载相应的库。

另一件事是,如果您在设置中启用了 IntelliJ 将为每个依赖项下载源代码和 javadoc jar,这可能看起来会再次下载依赖项。

注意,我在这里疯狂猜测,因为您没有包含您正在使用的程序的任何输出,所以很难说真正的问题是什么。

【讨论】:

以上是关于intellij/activator/sbt 正在下载其他之前下载的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

正在显示 jquery 验证错误消息,但正在提交表单

我正在尝试附加悬停动作,但正在立即调用悬停动作

如何查看PostgreSQL正在执行的SQL

如何以编程方式检查手机当前是不是正在充电或正在使用电池?

如何查看PostgreSQL正在执行的SQL

安卓手机有时开机就提示“Android正在启动 正在优化第N个应用(共N个)。”