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 正在下载其他之前下载的依赖项的主要内容,如果未能解决你的问题,请参考以下文章