使用sbt gen-idea或idea的autoimport特性下载sbt项目中的依赖源jar是很自然的事情但是我如何下载我在project/plugins.sbt中声明的sbt插件源文件
sbt gen-idea
project/plugins.sbt
balp4ylt1#
想法
“我想……我应该……我应该……我应该……”当您导入一个项目并在Preferences > Build,Execution,Deployment > Build Tools > sbt中选中Download sbt sources时,它将运行updateSbtClassifiers sbt任务。
Download sbt sources
updateSbtClassifiers
如上所述,您可以运行以下sbt任务:
sbt> updateSbtClassifiers
这个命令有些特殊,因为它知道如何解析插件的分类器。它还使用该任务范围内的设置。参见sbt/sbt#3432的警告。
更长的路
理解sbt是递归的是很重要的。build.sbt中声明的依赖将用于正确的构建。project/plugins.sbt中声明的依赖将用于元构建。当你只运行updateSbtClassifiers时,它是在正确的构建上运行的,但是依赖关系实际上是针对元构建的。所以我说这个任务有点特殊。另一种方法(可以实现不同的结果)是直接在元构建上运行updateClassifiers任务。首先切换到元构建:
build.sbt
updateClassifiers
sbt> reload plugins
现在您已经进入了元构建运行阶段:
sbt:project> updateClassifiers
这将检索依赖项的src和doc(对于某些插件,实际上可能不会这样做)。运行libraryDependencies查看元构建的依赖项。回到正确的
src
doc
libraryDependencies
sbt:project> reload return
对于一个方便的all in one命令运行:
sbt> updateClassifiers;updateSbtClassifiers;reload plugins;updateClassifiers;updateSbtClassifiers;reload return
故障排除下载失败
您可能会在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插件发布的地方。有关详细信息,请参见预定义的冲突解决程序。如果您没有看到它尝试了sbt-plugin-releases,那么很可能您遇到了sbt/sbt#3432。updateSbtClassifiers未使用正确的解析器。将以下内容添加到build.sbt文件中:
sbt-plugin-releases
updateSbtClassifiers / dependencyResolution := IvyDependencyResolution((updateSbtClassifiers / ivyConfiguration).value)
未附加源
即使updateSbtClassifiers成功下载并解析了src和doc,IDEA也可能无法连接它们。这似乎是sbt-structure plugin中的一个bug。详情请参见SCL-13619。
未尝试下载
如果由于某种原因没有下载源代码(没有下载失败的消息),请查看您的.ivy2/exclude_classifiers文件。我不完全确定这个文件是什么,但我知道,sbt将排除任何在这里。在我的情况下,它有很多东西,我不想排除,所以我删除它,然后它的工作。删除风险自担。
.ivy2/exclude_classifiers
k2arahey2#
您可以使用reload plugins进入包含插件的项目。如果你输入libraryDependencies,你可以(例如)看到插件依赖列表。使用reload return返回到正常的sbt控制台。更多信息:用于管理生成定义的命令
reload plugins
reload return
2条答案
按热度按时间balp4ylt1#
想法
“我想……我应该……我应该……我应该……”
当您导入一个项目并在Preferences > Build,Execution,Deployment > Build Tools > sbt中选中
Download sbt sources
时,它将运行updateSbtClassifiers
sbt任务。sbt
如上所述,您可以运行以下sbt任务:
这个命令有些特殊,因为它知道如何解析插件的分类器。它还使用该任务范围内的设置。参见sbt/sbt#3432的警告。
更长的路
理解sbt是递归的是很重要的。
build.sbt
中声明的依赖将用于正确的构建。project/plugins.sbt
中声明的依赖将用于元构建。当你只运行
updateSbtClassifiers
时,它是在正确的构建上运行的,但是依赖关系实际上是针对元构建的。所以我说这个任务有点特殊。另一种方法(可以实现不同的结果)是直接在元构建上运行
updateClassifiers
任务。首先切换到元构建:
现在您已经进入了元构建运行阶段:
这将检索依赖项的
src
和doc
(对于某些插件,实际上可能不会这样做)。运行libraryDependencies
查看元构建的依赖项。回到正确的
对于一个方便的all in one命令运行:
故障排除
下载失败
您可能会在sbt日志中看到它无法下载
src
或doc
。例如:如果你看上面,你会看到它尝试过的所有解析器。你应该看到一个
sbt-plugin-releases
,这是大多数sbt插件发布的地方。有关详细信息,请参见预定义的冲突解决程序。如果您没有看到它尝试了
sbt-plugin-releases
,那么很可能您遇到了sbt/sbt#3432。updateSbtClassifiers
未使用正确的解析器。将以下内容添加到build.sbt
文件中:未附加源
即使
updateSbtClassifiers
成功下载并解析了src
和doc
,IDEA也可能无法连接它们。这似乎是sbt-structure plugin中的一个bug。详情请参见SCL-13619。
未尝试下载
如果由于某种原因没有下载源代码(没有下载失败的消息),请查看您的
.ivy2/exclude_classifiers
文件。我不完全确定这个文件是什么,但我知道,sbt将排除任何在这里。在我的情况下,它有很多东西,我不想排除,所以我删除它,然后它的工作。删除风险自担。
k2arahey2#
您可以使用
reload plugins
进入包含插件的项目。如果你输入libraryDependencies
,你可以(例如)看到插件依赖列表。使用reload return
返回到正常的sbt控制台。更多信息:用于管理生成定义的命令