scala – 如何在常见的sbt项目中下载sbt插件源jar?

使用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会排除这里的任何内容.

在我的情况下,它有很多我不想要排除的东西所以我删除它然后它工作.删除风险由您自行承担.

点赞