首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个普通的sbt项目中下载sbt插件源码jars?

如何在一个普通的sbt项目中下载sbt插件源码jars?
EN

Stack Overflow用户
提问于 2014-11-04 07:27:10
回答 2查看 1.8K关注 0票数 5

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

但是如何下载我在project/plugins.sbt中声明的sbt插件源码jar呢?

EN

回答 2

Stack Overflow用户

发布于 2017-11-17 05:49:54

IDEA

IDEA应该已经做到了*。

当您导入一个项目并在Preferences > Build,Execution,Deployment > Build Tools > sbt中签入Download sbt sources时,它将运行updateSbtClassifiers sbt任务。

*请阅读Troubleshooting部分,因为这有几个已知问题。

sbt

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

代码语言:javascript
复制
sbt> updateSbtClassifiers

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

Longer

理解sbt is recursive是很重要的。

build.sbt中声明的依赖项将用于正确的构建

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

当您只运行updateSbtClassifiers时,它会在正确的构建上运行它,但是依赖项实际上是元构建的。这就是为什么我说这项任务有点特殊。

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

首先切换到meta-build:

代码语言:javascript
复制
sbt> reload plugins

现在您正在运行meta-build:

代码语言:javascript
复制
sbt:project> updateClassifiers

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

回到正题

代码语言:javascript
复制
sbt:project> reload return build run:

Troubleshooting

下载失败

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

代码语言:javascript
复制
[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文件中:

代码语言:javascript
复制
updateSbtClassifiers / dependencyResolution := IvyDependencyResolution((updateSbtClassifiers / ivyConfiguration).value)

未附加

即使updateSbtClassifiers成功下载并解析,srcdoc IDEA也可能不会附加它们。

这似乎是sbt-structure plugin中的一个错误。详情请参见SCL-13619

不尝试下载

如果由于某种原因,这不能下载源代码(没有失败的下载消息),那么可以查看您的.ivy2/exclude_classifiers文件。我不完全确定这个文件是用来做什么的,但我知道sbt会排除这里的任何内容。

在我的例子中,它有很多我不想排除的东西,所以我删除了它,然后它就起作用了。删除,风险自负。

票数 3
EN

Stack Overflow用户

发布于 2014-11-05 05:35:30

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

更多信息请点击此处:Commands for managing the build definition

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26725166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档