如何在普通sbt项目中下载sbt插件源码jar包?

Zav*_*ava 5 scala sbt

在 sbt 项目中下载依赖源 jars 是很自然的,使用sbt gen-idea或 idea 的自动导入功能

但是如何下载我在其中声明的 sbt 插件源 jars project/plugins.sbt

ste*_*bot 7

主意

IDEA应该已经做到了这一点*。

当您导入项目并Download sbt sources签入首选项 > 构建、执行、部署 > 构建工具 > sbt时,它将运行updateSbtClassifierssbt 任务。

* 请阅读故障排除部分,因为存在几个已知问题。


sbt

如上所述,您可以运行以下 sbt 任务:

sbt> updateSbtClassifiers
Run Code Online (Sandbox Code Playgroud)

该命令有些特殊,因为它知道解析插件的分类器。它还使用该任务范围内的设置。请参阅有关sbt/sbt#3432的警告。


更长的路

重要的是要理解sbt 是递归的。

在 will 中声明的依赖关系build.sbt是为了正确的构建。

will中声明的依赖项project/plugins.sbt用于元构建。

当您刚刚运行时,updateSbtClassifiers它是在正确的构建上运行的,但是依赖项实际上是针对元构建的。所以我说这个任务有点特殊。

updateClassifiers另一种方法(可以实现不同的结果)是直接在元构建上运行任务。

首先切换到元构建:

sbt> reload plugins
Run Code Online (Sandbox Code Playgroud)

现在您处于元构建运行中:

sbt:project> updateClassifiers
Run Code Online (Sandbox Code Playgroud)

这将检索您的依赖项的src和doc(对于某些插件来说,它实际上可能不会这样做)。运行libraryDependencies以查看元构建的依赖关系。

为了回到正确的状态

sbt:project> reload return
Run Code Online (Sandbox Code Playgroud)

要获得方便的多合一命令,请运行:

sbt> updateClassifiers;updateSbtClassifiers;reload plugins;updateClassifiers;updateSbtClassifiers;reload return
Run Code Online (Sandbox Code Playgroud)

故障排除

下载失败

您可能会在 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]  ::::::::::::::::::::::::::::::::::::::::::::::
Run Code Online (Sandbox Code Playgroud)

如果您查看上方,您将看到它尝试过的所有解析器。您应该会看到sbt-plugin-releases大多数 sbt 插件发布到的地方。有关更多详细信息,请参阅预定义解析器。

如果您没有看到它尝试过,sbt-plugin-releases那么您很可能遇到过sbt/sbt#3432。

updateSbtClassifiers没有使用正确的解析器。将以下内容添加到您的build.sbt文件中:

updateSbtClassifiers / dependencyResolution := IvyDependencyResolution((updateSbtClassifiers / ivyConfiguration).value)
Run Code Online (Sandbox Code Playgroud)

未附上来源

即使updateSbtClassifiers成功下载并解析, IDEAsrc也doc可能无法附加它们。

这似乎是sbt-struct 插件中的一个错误。有关详细信息,请参阅SCL-13619。

没有尝试下载

如果由于某种原因无法下载源代码(没有下载失败消息),请查看您的.ivy2/exclude_classifiers文件。我不完全确定这个文件的用途,但我确实知道 sbt 会排除这里的任何内容。

就我而言,它有很多我不想排除的东西,所以我删除了它,然后它就起作用了。删除的风险由您自行承担。


EEC*_*LOR 0

您可以使用reload plugins进入包含插件的项目。如果您键入,libraryDependencies您可以(例如)查看插件依赖项列表。用于reload return返回正常的 sbt 控制台。

更多信息请参见:管理构建定义的命令