jdtls为啥只能通过 sudo 才正常工作

你这个截图不完整,后面还会返回一串 json。

除了直接运行 jdtls 之外,还可以试试完整命令(命令因人不同,以 (insert (string-join (lsp-java--ls-command) " ")) 导出为准):

java -Declipse.application=org.eclipse.jdt.ls.core.id1 \
    -Dosgi.bundles.defaultStartLevel=4 \
    -Declipse.product=org.eclipse.jdt.ls.core.product \
    -Dlog.protocol=true \
    -Dlog.level=ALL \
    -XX:+UseParallelGC \
    -XX:GCTimeRatio=4 \
    -XX:AdaptiveSizePolicyWeight=90 \
    -Dsun.zip.disableMemoryMapping=true \
    -Xmx1G \
    -Xms100m \
    -jar $HOME/.jdtls/plugins/org.eclipse.equinox.launcher_1.6.500.v20230717-2134.jar \
    -configuration $HOME/.jdtls/config_mac \
    -data $HOME/.emacs.d/29.1/workspace/ \
    --add-modules=ALL-SYSTEM \
    --add-opens java.base/java.util=ALL-UNNAMED \
    --add-opens java.base/java.lang=ALL-UNNAMED
Content-Length: 126

{"jsonrpc":"2.0","method":"window/logMessage","params":{"type":3,"message":"Sep 14, 2023, 1:04:36 PM Main thread is waiting"}}

这个返回表示 jdtls 正在等待接入。

重启提示是 lsp-mode 发出的,有可能真的 jdtls 退出了,有可能 jdtls 还在运行,但是 lsp-mode 连不上。