IntelliJ/Activator/SBT正在下载其他已经下载过的依赖项。

16

我对sbt不是很熟悉,所以我的问题可能有点新手,但我注意到当我使用sbt创建一个项目并下载其依赖项时,如果我用intellij打开该项目,所有的依赖项都会被重新下载,同样的情况也发生在反向顺序intellij->sbt和activator中。

我(对sbt的了解比较少)知道它使用ivy,并且依赖项被下载到~/.ivy2/文件夹中……这就是sbt下载我的依赖项的地方,但似乎intellij在使用其他文件夹。

个人不怎么使用activator,但我希望配置sbt和intellij以使用相同的ivy路径…

2)最近我使用sbt +publishLocal将finagle-postgre发布到本地ivy,我可以在我的ivy文件夹中查看。

 /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文件...

谢谢各位!


你可以在项目本地的 .sbtopts 文件下设置本地 ivy 仓库的路径... 默认路径是 ~/.ivy2,但如果你把它设置为 ~/.ivy2/local,则需要更新构建文件 ~ 查看默认设置 - Edward J Beckett
2个回答

5
如果我们谈论的是IntelliJ在SBT/Activator已经下载完毕后仍然出现下载构件的情况,那么实际上很可能只是因为IntelliJ正在下载源码 - 它并没有重新下载二进制构件,只是伴随它们的源代码构件。当您查看背景任务弹出窗口中的刷新SBT项目任务时,这一点并不容易明显,因为完整的下载路径被截断了,所以你会看到类似于这样的内容:
[info] downloading https://repo1.maven.org/maven2/org/apache/httpcompo...

当你在控制台看到SBT下载的二进制文件时,自然会认为这是同一个二进制文件,但是如果你查看完整日志(点击 帮助 -> 在文件中显示日志 并打开文件浏览器中的 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 ...

如果你在进行项目导入时没有勾选Sources复选框,那么这些源码下载就不会发生。

在IntelliJ 2016.3.5和Scala插件v2016.3.9下测试通过。


+1;这与我的经验相符。在我的机器上,IntelliJ和SBT共享依赖项缓存,但是SBT默认情况下不获取源代码,而对我来说,IntelliJ会获取源代码。 - Rich

2
首先,激活器仅仅是SBT本身的启动器,因此行为上不应该有任何区别。
其次,如果您没有告诉它(例如通过设置SBT_OPTS环境变量),IntelliJ默认也会使用~/.ivy2中的文件(但这取决于您使用的IntelliJ版本)。
如果您在项目中没有明确设置scalaVersion,则可能会出现差异,例如当您使用不同的Scala版本(例如2.10.x与2.11.x)。然后,每个工具将默认下载相应Scala版本的库。
另一件事是,如果您在设置中启用了源码和JavaDoc JAR,则IntelliJ将为每个依赖项下载它们,这可能看起来像是再次下载依赖项。
请注意,我只是根据您没有提供程序输出而进行猜测,因此很难说出真正的问题。

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