0

我正在尝试将 emacs 设置为 scala 编辑器。为此,我正在尝试安装金属以使相应的模式起作用。

但是,由于某种原因,metals 要么无法从 emacs 安装,要么在使用 Coursier 安装时,无法从 emacs 响应。

因此,为了探索所有选项,我决定使用金属源代码(来自Github?但我遇到了无法正确使用它们的问题。

我能做些什么来让 emacs 从源头上使用金属?

目前,我已经尝试用

sbt 发布本地

然后尝试运行生成的 jar,结果可预测:

线程“main”中的异常 java.lang.NoClassDefFoundError: scala/collection/Seq at scala.meta.metals.Main.main(Main.scala) 原因:java.lang.ClassNotFoundException: scala.collection.Seq at java.base /jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader .loadClass(ClassLoader.java:522) ... 还有 1 个

处理金属stderr完成线程“main”中的异常java.lang.NoClassDefFoundError:scala/collection/Seq at scala.meta.metals.Main.main(Main.scala)引起:java.lang.ClassNotFoundException:scala.collection.Seq在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java .lang.ClassLoader.loadClass(ClassLoader.java:522) ... 还有 1 个

加工金属stderr完成

在我的系统中,我按照 scala 网站上的说明安装了 sbt。

我应该如何设置系统以便可以发射和使用金属?

4

1 回答 1

1

你不应该仅仅为了在 Emacs 中使用它而从源代码编译 Metals。查看官方文档:Emacs | 金属,特别是要求和安装部分。它提到

接下来你必须安装金属服务器。lsp-mode当在 Scala 缓冲区或通过lsp-install-server命令启用时,Emacs 可以为您完成。您也可以手动正确执行coursier install metals和配置$PATH变量。

如果您在安装时遇到问题,请尝试在Scalameta Discord上寻求帮助。还有一个专用的#emacs-users频道​​。


也就是说,如果您出于任何其他原因仍想使用本地发布的 Metals 工件(例如,为 Metals 代码做出贡献并在本地测试更改),您应该能够做到这一点。贡献文档描述了如何使用代码库和测试您的本地 Metals 版本。

简而言之,运行后sbt publishLocal,您需要在编辑器中更新服务器版本设置并运行Metals: Restart server命令。它应该选择本地发布的版本。

于 2022-01-29T01:52:35.837 回答