如何让 Eclipse 识别来自 SBT 的依赖项

Posted

技术标签:

【中文标题】如何让 Eclipse 识别来自 SBT 的依赖项【英文标题】:How to have Eclipse recognize dependencies from SBT 【发布时间】:2012-02-22 15:05:21 【问题描述】:

我想弄清楚如何让 Eclipse 识别使用 SBT 检索的依赖项? SBT 下载正确的依赖项并将它们放在我的 ~/.ivy 目录中,但 eclipse 看不到它们。有没有办法做到这一点?

谢谢

【问题讨论】:

你仍然接受旧答案而不是新答案吗? 【参考方案1】:

如果您使用的是 sbteclipse 插件,它可以通过简单的方式实现。在 sbt 类型中:

重新加载 eclipse with-source=true

然后在 Eclipse 中,在项目文件夹上按 F5 以刷新它。或者右键单击并选择“刷新”。刚刚好。

【讨论】:

这应该是最受欢迎的答案,而不是现在的答案。像魅力一样工作! +1 for with-source 允许在 Eclipse 中导航我正在使用的依赖项的代码。 它工作正常,当“引用的依赖”已经在 Eclipse 中显示时 - 它添加了新的。但是,如果项目直接没有显示“引用的依赖项”(是的,它发生在我身上),这将无济于事。【参考方案2】:

这可能不是您正在寻找的答案,我承认它并不优雅,但它目前对我有用,这意味着我认为定期执行以下操作而不是研究并找到更优雅的方法需要更少的时间解决方案。

我假设您使用的是 sbt-eclipse 插件 (https://github.com/typesafehub/sbteclipse)。当我向我的项目添加新的依赖项时(这实际上很少见),我只需从插件重新生成我的 eclipse 项目文件。这样做的缺点是我有一个多模块项目,在 eclipse 中刷新项目后,我需要在 eclipse 构建路径编辑器中重新添加项目间依赖项。

就像我提到的那样,它非常 hacky,但总而言之,我真的不会浪费太多时间来做这件事。它不漂亮,但很有效。

祝你好运, 安迪

【讨论】:

是的 - 这也是我所做的。它没有想象中的那么漂亮,但它确实有效。 sbteclipse 也会正确添加项目依赖项,如果它们也在 sbt 构建文件中设置。 任何,请让我知道 sbteclipse 在创建项目间依赖项时如何失败。它绝对应该在最新版本 (1.5) 和最新里程碑 (2.0.0-M1..M3) 和快照 (2.0.0-SNAPSHOTS) 中工作。我建议您使用 sbt 邮件列表并在主题行中使用前缀 [sbteclipse]。谢谢。黑子 @HeikoSeeberger:由于 sbt 邮件列表正在逐步淘汰,您能告诉我们如何在不被黑客攻击的情况下解决 OP 的问题吗?【参考方案3】:

我为 Eclipse 使用了 Apache IvyDE 插件,而且我对这种方法有更多的运气。它只是 described in the old sbt docs,但适用于 sbt 0.11

首先,在Eclipse中安装IvyDE插件并重启。

运行 sbt 命令deliver-local - 这将创建一个包含依赖项的 XML ivy 文件。

在 Eclipse 中,在您的 Project/Properties - Java Build Path - Libraries 下,单击“Add Library”并选择“IvyDE Managed Dependencies”,然后选择文件 target/scala-2.9.1/ivy-projectversion em>.xml

当您向 build.sbt 添加新的依赖项时,再次运行 sbt 命令 reloaddeliver-local。然后在 Package Explorer 中右键单击项目的 Ivy 库 - 它将被称为“target/scala-2.9.1/ivy-projectversion.xml [compile,test]”,然后单击第二个“刷新”菜单项(在“刷新”和“重新加载设置”之间 - 不是“F5 刷新”)。

【讨论】:

是的,这就是这里的“最”解决方案。 OP 想要的是与 SBT 的原生 Eclipse 集成,这是最接近它的。有了这个,eclipse 实际上看到了 IVY 依赖并在本地使用它们 这真的解决了我对 eclipse/sbt 和 eclipse scala IDE 的最大痛点!【参考方案4】:

在命令提示符下进入项目文件夹并输入

sbt eclipse

这应该会在 eclipse 项目中生成适当的 .classpath 条目。

回到eclipse,选择项目并按f5,这将重新加载引用的库。

【讨论】:

【参考方案5】:

您只需要从项目主页执行:

sbt "eclipse with-source=true"

或输入sbt控制台并写入:

eclipse with-source=true

顺便说一句:我不知道从 12 年 1 月起是否发生了一些变化,但现在看起来要简单得多。

【讨论】:

【参考方案6】:

以下对我有用:

1) 在 Eclipse 中关闭项目

2) 在我的文件资源管理器中,浏览到我的 Eclipse 项目,确保隐藏文件可见

3) 在简单的文本编辑器中打开 .classpath

4) 复制底部条目。比如我现在的项目中是<classpathentry path="/home/natalie/.ivy2/cache/org.scalatest/scalatest_2.9.1/jars/scalatest_2.9.1-1.8.jar" kind="lib"></classpathentry>

5) 导航到我的 .ivy 文件夹,缓存,然后到我通过 sbt 添加的库

6) 右键单击​​jar文件,选择属性,复制路径和jar文件名并将其替换到我在步骤4中复制的条目中

7) 保存.classpath

8) 在 Eclipse 上打开我的项目

Eclipse 中现在提供了新的依赖项。

【讨论】:

问题是有人怎么能自动而不是手动做到这一点。

以上是关于如何让 Eclipse 识别来自 SBT 的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

使用 SBT 和 Scala IDE 添加和删除依赖项

使用 sbt-assembly 来自单个项目的具有不同外部依赖项的多个可执行 jar 文件

sbteclipse:eclipse 找不到托管依赖项

如何将 sbteclipse 插件添加到 SBT 0.10.x

如何在 sbt 项目中使用 sbt 插件作为库依赖项?

build.sbt:如何添加 spark 依赖项