java+emacs现在该是什么姿势?

之前有个帖子,不过我感觉我问得更具体一点,还是另开帖说,现在的方案似乎有:

  • lsp-mode + company-lsp
  • meghanada
  • spacemacs的java layer: This layer adds support for the Java language using the Eclim client/server. 用的eclim(“eclipse+vim”) develop branch已经可以在meghanada/ensime/eclim中选择后端

伸一下手,还请用过的坛友说说,这三个功能是覆盖面是一样的?还是各有侧重?什么样的组合比较好用呢?

2 个赞
  1. 我个人的限制,由于公司的环境,大家JAVA 基本用POM来进行配置。
  2. spacemacs java layer 支持三种,eclim/meghanada/ensime
  3. 我个人的尝试:
  • eclim, 感觉写代码有明显卡顿,不太能忍受;
  • 我写scala,用sbt配置文件,用ensime非常舒服,速度极快,体验比在IntelliJ下好一点;但java 中用pom配置文件的情况下,ensime没有配置成功,总有各种问题。ensime对pom的支持有限。
  • 用meghanada,spacemacs在develop分支中推荐这个。写代码卡顿,但算能忍受,我之前会用它写java,复杂的语法分析用intelliJ,目前已经完全在intelliJ写java,会用emacs,结合project, magit, meghanada, ivy等浏览代码,及写小片段。
  1. lsp-mode 没用过

以上是我目前的体验。我个人觉得ensime如果能在java中,不论sbt或者mvn,都流畅使用,就好了。

2 个赞

之前用过,首先我的配置,win10 pci-ssd.我一直都在找java的emacs layer,因为方便用org管日程.目前java属于弃坑的状态.

最早用的eclim,太大了,而且卡顿,开代码提示根本没法敲代码.放弃了.

然后开始用meghanada,一开始感觉很好用,没有发现卡顿问题.但是当打开引入的包比较多的项目的时候,由于代码提示的问题会导致整个emacs卡死.无奈只能写小项目.最近的版本把卡死的问题改好了,但是提示会变得有是有有时没有.因为emacs这边玩的不是很6.所以暂时也弃坑了.

现在主要的开发工作还是在IDEA里面做,emacs全屏占一整个屏幕.用多屏切换着用.emacs更多的是敲前端.

1 个赞

看来这几个 server 当中,ensime 性能最好。

对 Java 开发不了解。sbt 和 pom 不能共存/相互转换吗?这个工具 https://github.com/ensime/ensime-maven 用来做什么?

sbt, maven分别是scala, java的构建工具,用途(语言)不一样,就不存在转换[build tool配置文件]的问题了(转了也没用)。

这个链接是怎样配置ensime识别maven的工程配置来把ensime跑起来吧。

理论上,ensime 支持mvn(尽管功能不如sbt全面) 和 java. 但我就没有配置成功过。。。

放弃的姿势……

我是对java彻底放弃,而我们这儿已经没人用Emacs写Java了,全都投入IDEA的怀抱

2 个赞

刚刚试了一下 lsp-java,服务端是 Eclipse JDT Language Server

补全很快,当然,这只是一个 helloworld,大一点的程序未必。内存占用不知算如何,没用过其它 server。

是否支持 POM 未知,我还没弄明白它怎么工作的。

同意,java那种用库远远多于基本语言功能的语言,还是用大型IDE吧

1 个赞

现在有了 lsp,还是可以期待的。

Emacs 作好前端展示,把其它的锅甩给 lang-server。

当 lsp 一统江湖的时候,当 IDE 也只是 lsp 前端的时候,就无须再纠结 Emacs 还是 IDE 了。

1 个赞

讲个故事,Java 之父是第一个 Unix 版本 Emacs 的作者

1 个赞

看起来不错, 但我还没有尝试, 计划找个时间入坑看看. 最近从meghanada转为ensime (both for java and scala), java上还是存在定义跳转的缺陷等, 但速度上比meghanada能快一点.

3 个赞

是否用过 eclipse.jdt.ls,这是 eclipse 官方的 lava language server,看它的介绍应该是比较完善的。但是在我这里表现不佳,不能补全 pom.xml 引入的包。是 Emacs 配置不正确吗?

(打算抽空把公司的 Java 项目过一遍,但我是个外行)

  1. 之前尝试了intellij-lsp, 还不错, 我这边用起来比较方便, 但需要下载intelliJ, 且不同project跳转的时候好像有点问题, 记不清楚了.
  2. lsp-java 默认的server是eclipse提供, 我这边没有配置成功. 对lsp-ui感觉太过于冗余, 总是跳出来信息有些干扰写代码. 插一句, lsp-python, 我这边也一直没有配置好.
  3. ensime 在java的项目上体验不佳, 远不如在scala上顺滑. 好像ensime本身现在更新的也较少了.

现在meghanada相当好用, 我基本不变了, 它也是目前spacemacs的默认. 跳转等很快, 经常更新维护.

这得等到啥时候啊

lsp-java 跟 meghanada 感觉差不多了, dap-mode 用来给 debug (dap-java debug 经常显示数组越界和json解析异常,还是不太稳,dap-python 感觉要好不少)

1 个赞

我没关注,你现在可以试试。

我试过,挺好用的,我也 一直在用,唯一的问题是它会把你的ide都窗口关掉,让我想 debug的时候有点烦。

请问你是怎么配置 intellij-lsp 的?我一直没有配置成功。

作者提供了一个参考 把它作为local layer 就可以了. 如果有问题, 就是作者对lsp-intellij 或是intellij-lsp命名不统一. 改一下就好.