使用sbt gen-idea或idea的自动导入功能在sbt项目中下载依赖源源jar是很自然的
但是如何下载我在project / plugins.sbt中声明的sbt插件源jar
最佳答案 理念
IDEA应该已经这样做了*.
导入项目并在Preferences>中选中Download sbt sources时构建,执行,部署>构建工具> sbt然后它将运行updateSbtClassifiers sbt任务.
*阅读故障排除部分,因为有几个已知的问题.
SBT
如上所述,您可以运行以下sbt任务:
sbt> updateSbtClassifiers
这个命令有些特殊,因为它知道解决插件的分类器.它还使用作用于该任务的设置.请参阅有关sbt/sbt#3432的警告.
更长的路
重要的是要理解sbt is recursive.
build.sbt中声明的依赖项将用于正确的构建.
在project / plugins.sbt中声明的依赖项将用于元构建.
当您运行updateSbtClassifiers时,它会在正确的构建上运行它,但是依赖项实际上是用于元构建.这就是我说这项任务有点特殊的原因.
另一种方法(可以实现不同的结果)是直接在元构建上运行updateClassifiers任务.
首先切换到元构建:
sbt> reload plugins
现在您正处于元构建运行中:
sbt:project> updateClassifiers
这将检索您的依赖项的src和doc(对于某些插件,它实际上可能不会这样做).运行libraryDependencies以查看元构建的依赖关系.
要回到正确的位置
sbt:project> reload return build run:
故障排除
下载失败
您可能会在sbt日志中看到它无法下载src或doc.例如:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: FAILED DOWNLOADS ::
[warn] :: ^ see resolution messages for details ^ ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: rocks.muki#sbt-graphql;0.5.0!sbt-graphql.jar(doc)
[warn] :: rocks.muki#sbt-graphql;0.5.0!sbt-graphql.jar(src)
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
如果你看上面就会看到它试过的所有解析器.您应该看到一个sbt-plugin-releases,这是发布大多数sbt插件的地方.有关详细信息,请参见predefined resolvers.
如果你没有看到它尝试sbt-plugin-releases那么你很可能遇到了sbt/sbt#3432.
updateSbtClassifiers不使用正确的解析器.将以下内容添加到build.sbt文件中:
updateSbtClassifiers / dependencyResolution := IvyDependencyResolution((updateSbtClassifiers / ivyConfiguration).value)
来源没有附加
即使updateSbtClassifiers成功下载并解析了src,doc IDEA也可能无法附加它们.
这似乎是sbt-structure plugin中的一个错误.有关详细信息,请参阅SCL-13619.
没有尝试下载
如果由于某种原因这不下载源(没有失败的下载消息),那么看看你的.ivy2 / exclude_classifiers文件.我不完全确定这个文件的用途,但我知道sbt会排除这里的任何内容.
在我的情况下,它有很多我不想要排除的东西所以我删除它然后它工作.删除风险由您自行承担.