emacs中写java项目体验如何?

请教下现在emacs中开发java项目体验如何,像jdtls这种lsp server相较于IDEA这种ide的体验相差如何呢?

我用的是 eglot + eglot-java + dape 作为工具写 Java 的。说说体验。

  1. 补全。IDEA 的补全提示肯定比 Emacs 要快的,以及现在 IDEA 可以 AI 补全,类似 copilot,但也有人不喜欢这种。(哪怕 lsp-bridge 比不上 IDEA 自带的补全)
  2. debug。 体验也不如 IDEA,尤其是低版本的 JDK + spring 的话还是在 IDEA 当中更加舒服。springboot 的话用 dape 的话,可以相对舒服一些,但体验还是不如 IDEA。
  3. 编辑。 这个肯定是 Emacs 更加高效一些,全键盘操作不管你是用的 evil 还是 meow都会更加高效一些。(非模式编辑我没试过)
  4. 版本管理。 git 操作的话习惯了 magit 也可以更加高效一些,但是 IDEA 的 git 工具也挺好用的其实。

总得来说,可以用。(再次申明,低版本 JDK + spring 还是用 IDEA 吧)

3 个赞

windows下 eglot + jdtls + (手工 mvn gradle)

只用作最基础的代码编辑

优点:

  1. 补全/跳转 速度快(快捷键)
  2. 搜文本/文件非常快 (global rg等其他工具)

缺点:

  1. 需要独立开启终端
  2. 绝大部分需要人工参与(熟练了也就无所谓了)

说起来跳转,mapper.java 跳 mapper.xml 需要自己写个函数跳转。(很简单)

另外,xref 可以设置 (setq xref-auto-jump-to-first-xref 'move) 配合 popper,写个关闭 xref buffer 的函数,可以增加体验。不用 popper 的可以参考我以前自己写的一个函数。 .emacs.d/lisp/init-prog.el at main · LuciusChen/.emacs.d · GitHub

最后,用 eglot 的话默认的是 flymake 作为检查工具,如果不习惯一直弹出错误提示(idea 用户应该不会不习惯),可以设置 (setq flymake-no-changes-timeout nil) ,但是这样会有个问题,参见 https://github.com/joaotavora/eglot/issues/1296, hack 的方法也在这个 issue 里面。

1 个赞

借楼问个问题。 jdtls需要Java17。 但是项目的运行环境需要java8 。 应该怎么配置?

你说的配置是指什么?lsp 的话无所谓,dape 的话那肯定用不了。

eclipse < emacs + lsp <<< idea

差 但如果你写的是clojure 目前没比它更好的吧?虽然idea上也有一个什么clojurekit和cursive 可能是我先入为主 但cider的感受是最好的。

java目前的问题也有先入为主的情况,首先 ,emacs配置java比较难,次体验仅比eclipse好一些 (eclipse那个甚至自动补全都没有的版本, 没错因为我很不习惯eclipse 按理来说eclipse应该是比emacs+lsp好的吧 这玩意之前是工业界的java ide目前还有头硬的人在用)。 补全不一定有效 可能是我没配置好 maven包可能无法正确解析,lombok配上agents后是可以用的,但性能上 idea会好一些(个人体感),还有麻烦的地方 用过idea后 有一些习惯没改回来 双shift什么的

兄弟 刚发现eglot-java, 但是有个问题, 跳转只能跳一层我这里, 您用着是正常的么,可以跳多层么?

确实有一部分是先入为主的问题,双shift没记错是按照文件名称查找,emacs 可以用 consult-fd,cmd+shift+f 可以用 consult-ripgrep 代替。

跳转层次我没理解,可能我写的项目没有你的复杂,你可以举例么?

源码查看就是, 我引用了一个包, 跳进去看源码, 但是源码里引用的其他的包就无法查看了。

也许这个设置可以解决 (setq eglot-extend-to-xref t)