使用Eclipse JDT Language Server的Emacs Java IDE。
LSP Java模式支持以下JDT功能:
complete-at-point这里是EmacsConf2019的演示 https://www.youtube.com/watch?v=Bbjxn9yVNJ8
这里有一个涵盖设置和使用的教程 https://xpressrazor.wordpress.com/2020/11/04/java-programming-in-emacs/

lsp-java已包含在spacemacs中(目前仅在dev分支)。如果你使用的是spacemacs的开发版本,只需在dotspacemacs-configuration-layers中添加(java :variables java-backend 'lsp)。
推荐通过package.el安装LSP Java,这是Emacs内置的包管理器。LSP Java可在两个主要的package.el社区维护的仓库中找到 - MELPA Stable和MELPA。
<kbd>M-x</kbd> package-install <kbd>[RET]</kbd> lsp-java <kbd>[RET]</kbd>
然后在你的.emacs文件中添加以下行,并打开指定项目中的任意文件。
(require 'lsp-java) (add-hook 'java-mode-hook #'lsp)
lsp-java会自动检测服务器是否缺失,并在首次启动前下载Eclipse JDT Language Server。服务器安装将在lsp-java-server-install-dir中进行。它会检测是否存在dap-mode,并下载所需的服务器端插件/组件。如果你想更新服务器,可以运行lsp-java-update-server。要运行特定版本的Eclipse JDT Language Server,请使用lsp-java-server-install-dir。
使用company-capf、lsp-ui和dap-mode的最小配置。如果你有现有的Java项目,请设置lsp-java-workspace-dir。现在你可以探索lsp-java-*、dap-java-*、dap-*和lsp-*下的方法。
(condition-case nil (require 'use-package) (file-error (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) (package-initialize) (package-refresh-contents) (package-install 'use-package) (setq use-package-always-ensure t) (require 'use-package))) (use-package projectile) (use-package flycheck) (use-package yasnippet :config (yas-global-mode)) (use-package lsp-mode :hook ((lsp-mode . lsp-enable-which-key-integration))) (use-package hydra) (use-package company) (use-package lsp-ui) (use-package which-key :config (which-key-mode)) (use-package lsp-java :config (add-hook 'java-mode-hook 'lsp)) (use-package dap-mode :after lsp-mode :config (dap-auto-configure-mode)) (use-package dap-java :ensure nil) (use-package helm-lsp) (use-package helm :config (helm-mode)) (use-package lsp-treemacs)
lsp-execute-code-action - 执行代码操作。lsp-rename - 重命名光标处的符号lsp-describe-thing-at-point - 显示光标处事物的帮助。lsp-goto-type-definition - 跳转到类型定义lsp-goto-implementation - 跳转到实现lsp-restart-workspace - 重启项目lsp-format-buffer - 格式化当前缓冲区lsp-symbol-highlight - 高亮光标下符号的所有相关引用。lsp-workspace-folders-add - 添加工作区文件夹lsp-workspace-folders-remove - 移除工作区文件夹lsp-workspace-folders-switch - 切换工作区文件夹lsp-java-organize-imports - 组织导入lsp-java-build-project - 执行项目的部分或完整构建lsp-java-update-project-configuration - 更新项目配置lsp-java-actionable-notifications - 解决可操作的通知lsp-java-update-user-settings - 更新用户设置(查看下表中的选项。)lsp-java-update-server - 更新服务器安装。lsp-java-generate-to-string - 生成toString方法。lsp-java-generate-equals-and-hash-code - 生成equals和hashCode方法。lsp-java-generate-overrides - 生成方法重写lsp-java-generate-getters-and-setters - 生成getter和setter。lsp-java-type-hierarchy - 打开类型层次结构。使用前缀参数指定层次结构类型。LSP Java通过Eclipse JDT Language Server代码操作提供丰富的重构集,其中一些绑定到Emacs命令:
lsp-java-extract-to-constant - 提取常量重构lsp-java-add-unimplemented-methods - 添加未实现方法重构lsp-java-create-parameter - 创建参数重构lsp-java-create-field - 创建字段重构lsp-java-create-local - 创建局部变量重构lsp-java-extract-method - 提取方法重构lsp-java-add-import - 添加缺失的导入lsp-jt-browser - 浏览测试并运行/调试它们。
** 使用 x 运行光标下的测试;d 调试光标下的测试。R 刷新。
** 支持GUI操作。lsp-jt-report-open - 打开测试报告lsp-jt-lens-mode - 测试镜头模式(需要启用 lsp-lens-mode)lsp-java-dependency-list - 查看Java依赖LSP Java与STS4集成,提供以下功能。
除了与Eclipse JDT Language Server集成外,lsp-java还提供了与STS4的集成,涵盖Spring Boot的application.properties、application.yml和.java文件。
确保已配置JAVA_HOME。当您调用lsp-java-update-server时,lsp-java将自动下载STS4。要启用STS4集成,请在配置中添加以下行:
(require 'lsp-java-boot) ;; 启用镜头 (add-hook 'lsp-mode-hook #'lsp-lens-mode) (add-hook 'java-mode-hook #'lsp-java-boot-lens-mode)
.java文件功能轻松导航到源代码中的Spring特定元素。

lsp-workspace-symbol - (使用helm-lsp效果更佳)
@/ 显示所有定义的请求映射(映射路径、请求方法、源位置)@+ 显示所有定义的bean(bean名称、bean类型、源位置)@> 显示所有函数(原型实现)@ 显示代码中所有Spring注解轻松导航到运行中应用的提供的请求映射。

lsp-workspace-symbol - (使用helm-lsp效果更佳)
// 显示所有运行中Spring Boot应用的请求映射,并为选定的端点打开浏览器STS4自动检测本地机器上运行的Boot应用的JVM进程。
对于某些类型的信息,STS 4还可能在代码镜头中显示"快速摘要"。
如果您的机器上运行多个应用实例,所有这些实例的实时数据都将显示在悬停信息中。
(add-hook 'java-mode-hook #'lsp-java-boot-lens-mode)

@Profile:显示运行中应用的活动配置信息@Component、@Bean、@Autowired:显示来自实时应用的bean及其装配的详细信息@ContidionalOn...:显示运行时条件及其评估信息使用模板编写Spring代码,通过常规代码补全可用。
@GetMapping@PostMapping@PutMappingSpring特定注解的附加代码 补全

.properties和.yml文件功能此扩展分析项目的类路径,解析并索引找到的任何Spring Boot属性元数据。支持Maven和Gradle项目。
索引中的数据用于在编辑.properties或.yml格式的Spring Boot属性时提供验证、代码补全和信息悬停。


lsp-java 为 Spring Initializr 提供了一个前端界面,通过 lsp-java-spring-initializr 可以直接在 Emacs 中简化创建 Spring Boot 项目的过程。

lsp-java-server-install-dir - eclipse.jdt.ls-server 的安装目录。末尾需要有斜杠。lsp-java-jdt-download-url - JDT JS 下载链接。如果想使用 Eclipse Che JDT LS,请使用 http://download.eclipse.org/che/che-ls-jdt/snapshots/che-jdt-language-server-latest.tar.gz。lsp-java-java-path - Java 可执行文件的路径。lsp-java-progress-string - 语言服务器报告的 Java 进度状态。lsp-java-workspace-dir - LSP Java 工作空间目录。lsp-java-workspace-cache-dir - LSP Java 工作空间缓存目录。lsp-java-themes-directory - 包含主题的目录。lsp-java-theme - 要使用的主题。lsp-java-pop-buffer-function - 用于显示帮助窗口的函数。lsp-java-vmargs - 指定用于启动 Java 语言服务器的额外 VM 参数。例如,使用 -noverify -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication 可以绕过类验证,将堆大小增加到 1GB,并启用 G1 垃圾收集器的字符串重复数据删除功能。lsp-java-9-args - 指定 Java 9 及更高版本特定的参数。lsp-java-errors-incomplete-classpath-severity - 指定 Java 文件的类路径不完整时消息的严重程度。lsp-java-configuration-check-project-settings-exclusions - 检查是否应从文件浏览器中排除扩展生成的项目设置文件(.project、.classpath、.factorypath、.settings/)。lsp-java-configuration-update-build-configuration - 指定对构建文件的修改如何更新 Java 类路径/配置。lsp-java-trace-server - 跟踪 VS Code 和 Java 语言服务器之间的通信。lsp-java-import-gradle-enabled - 启用/禁用 Gradle 导入器。lsp-java-import-maven-enabled - 启用/禁用 Maven 导入器。lsp-java-maven-download-sources - 启用/禁用 Maven 源代码构件的急切下载。lsp-java-references-code-lens-enabled - 启用/禁用引用代码镜头。lsp-java-signature-help-enabled - 启用/禁用签名帮助。lsp-java-implementations-code-lens-enabled - 启用/禁用实现代码镜头。lsp-java-configuration-maven-user-settings - Maven 的 settings.xml 路径。lsp-java-format-enabled - 启用/禁用默认 Java 格式化程序。lsp-java-save-actions-organize-imports - 启用/禁用保存时自动整理导入。lsp-java-import-exclusions - 配置用于排除文件夹的 glob 模式。lsp-java-content-provider-preferred - 首选内容提供者(通常是第三方反编译器 ID)。我们支持 https://github.com/dgileadi/vscode-java-decompiler。要启用它,请添加:
(setq lsp-java-content-provider-preferred "fernflower")
lsp-java-autobuild-enabled - 启用/禁用"自动构建"。lsp-java-max-concurrent-builds - 最大同时进行的项目构建数。lsp-java-completion-enabled - 启用/禁用代码完成支持。lsp-java-completion-overwrite - 设置为 true 时,代码完成会覆盖当前文本。设置为 false 时,代码会简单地添加。lsp-java-completion-guess-method-arguments - 设置为 true 时,从代码辅助提案列表中选择方法时会猜测方法参数。lsp-java-completion-favorite-static-members - 定义静态成员或带有静态成员的类型列表。即使缺少导入,内容辅助也会提出这些静态成员。lsp-java-completion-import-order - 定义导入语句的排序顺序。包或类型名称前缀(如 'org.eclipse')是有效的条目。导入总是添加到最具体的组中。lsp-java-folding-range-enabled - 启用/禁用智能折叠范围支持。如果禁用,将使用 VS Code 提供的默认基于缩进的折叠范围。indentation-based - [实验性] 启用/禁用服务器上后台进程的进度报告。lsp-java-progress-reports-enabled - [实验性] 启用/禁用服务器上后台进程的进度报告。lsp-java-format-settings-url - 指定 Eclipse 格式化程序 xml 设置 的 url 或文件路径。lsp-java-format-settings-profile - Eclipse 格式化程序设置中的可选格式化程序配置文件名称。lsp-java-format-comments-enabled - 在代码格式化期间包含注释。lsp-java-format-on-type-enabled - 启用/禁用在输入 ;、<enter> 或 } 时自动格式化代码块。lsp-java-bundles - 将在 JDT 服务器中加载的包列表。lsp-java-code-generation-hash-code-equals-use-java7objects - 生成 hashCode 和 equals 方法时使用 Objects.hash 和 Objects.equals。此设置仅适用于 Java 7 及更高版本。lsp-java-code-generation-hash-code-equals-use-instanceof - 生成 hashCode 和 equals 方法时使用 'instanceof' 比较类型。lsp-java-code-generation-use-blocks - 生成方法时在 'if' 语句中使用代码块。lsp-java-code-generation-generate-comments - 生成方法时生成方法注释。lsp-java-code-generation-to-string-template - 生成 toString 方法的模板。lsp-java-code-generation-to-string-code-style - 生成 toString 方法的代码风格。lsp-java-code-generation-to-string-skip-null-values - 生成 toString 方法时跳过空值。lsp-java-code-generation-to-string-list-array-contents - 列出数组内容而不是使用原生 toString()。lsp-java-code-generation-to-string-limit-elements - 限制要列出的数组/集合/映射中的项目数量,如果为 0 则列出所有项目。lsp-java-inhibit-message - 如果非 nil,通过 inhibit-message 抑制 java 消息回显。lsp-mode GUI 控件。(setq lsp-inhibit-message t)
(setq lsp-ui-sideline-update-mode 'point)
当特定文件不是导入项目的一部分时,Eclipse JDT Language Server 无法计算当前类路径。
查看 ~/.emacs.d/workspace/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml。如果您更新了本地 Java 路径并希望 LSP 使用新版本,请尝试删除 ~/.emacs.d/workspace/ 目录并重新启动 LSP。另请参阅 #114。
如果您安装了多个 Java JDK 版本并想更改 LSP 使用的 Java 版本,还需要设置 lsp-java-configuration-runtimes。以下是设置 lsp-java-configuration-runtimes 的示例:
(setq lsp-java-configuration-runtimes '[(:name "JavaSE-1.8" :path "/home/kyoncho/jdk1.8.0_201.jdk/") (:name "JavaSE-11" :path "/home/kyoncho/jdk-11.0.1.jdk/" :default t)])
;; 当前VSCode的默认设置 (setq lsp-java-vmargs '("-XX:+UseParallelGC" "-XX:GCTimeRatio=4" "-XX:AdaptiveSizePolicyWeight=90" "-Dsun.zip.disableMemoryMapping=true" "-Xmx2G" "-Xms100m"))


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企 业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩 、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确 的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。


AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。


一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助 力创意创作
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号