scala 如何在公共sbt项目中下载sbt插件源文件?

fdx2calv  于 2023-05-22  发布在  Scala
关注(0)|答案(2)|浏览(184)

使用sbt gen-idea或idea的autoimport特性下载sbt项目中的依赖源jar是很自然的事情
但是我如何下载我在project/plugins.sbt中声明的sbt插件源文件

balp4ylt

balp4ylt1#

想法

“我想……我应该……我应该……我应该……”
当您导入一个项目并在Preferences > Build,Execution,Deployment > Build Tools > sbt中选中Download sbt sources时,它将运行updateSbtClassifiers sbt任务。

  • 阅读故障排除部分,因为有几个已知问题。
    sbt

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

sbt> updateSbtClassifiers

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

更长的路

理解sbt是递归的是很重要的。
build.sbt中声明的依赖将用于正确的构建
project/plugins.sbt中声明的依赖将用于元构建
当你只运行updateSbtClassifiers时,它是在正确的构建上运行的,但是依赖关系实际上是针对元构建的。所以我说这个任务有点特殊。
另一种方法(可以实现不同的结果)是直接在元构建上运行updateClassifiers任务。
首先切换到元构建:

sbt> reload plugins

现在您已经进入了元构建运行阶段:

sbt:project> updateClassifiers

这将检索依赖项的srcdoc(对于某些插件,实际上可能不会这样做)。运行libraryDependencies查看元构建的依赖项。
回到正确的

sbt:project> reload return

对于一个方便的all in one命令运行:

sbt> updateClassifiers;updateSbtClassifiers;reload plugins;updateClassifiers;updateSbtClassifiers;reload return

故障排除
下载失败

您可能会在sbt日志中看到它无法下载srcdoc。例如:

[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插件发布的地方。有关详细信息,请参见预定义的冲突解决程序。
如果您没有看到它尝试了sbt-plugin-releases,那么很可能您遇到了sbt/sbt#3432
updateSbtClassifiers未使用正确的解析器。将以下内容添加到build.sbt文件中:

updateSbtClassifiers / dependencyResolution := IvyDependencyResolution((updateSbtClassifiers / ivyConfiguration).value)

未附加源

即使updateSbtClassifiers成功下载并解析了srcdoc,IDEA也可能无法连接它们。
这似乎是sbt-structure plugin中的一个bug。详情请参见SCL-13619

未尝试下载

如果由于某种原因没有下载源代码(没有下载失败的消息),请查看您的.ivy2/exclude_classifiers文件。我不完全确定这个文件是什么,但我知道,sbt将排除任何在这里。
在我的情况下,它有很多东西,我不想排除,所以我删除它,然后它的工作。删除风险自担。

k2arahey

k2arahey2#

您可以使用reload plugins进入包含插件的项目。如果你输入libraryDependencies,你可以(例如)看到插件依赖列表。使用reload return返回到正常的sbt控制台。
更多信息:用于管理生成定义的命令

相关问题