jdt eclipse
Eclipse JDT Language Server(又名jdt.ls)是在Eclipse Foundation孵化的语言服务器协议的开源Java语言特定实现。
从语言服务器协议网站:
语言服务器协议在工具(客户端)和语言智能提供程序(服务器)之间使用,以将自动完成,转到定义,查找所有引用等功能集成到工具中。
语言服务器协议是MIT许可下的一个开源项目,最初是由Microsoft在将OmniSharp和TypeScript Server集成到Visual Studio Code编辑器中时开发的,目的是简化新的编程语言与编辑器的集成。 后来它是独立开发的,现在完全与编辑器/ IDE无关。 该协议指定必须以JSON RPC v2.0格式交换消息,但不强制要求特定的传输机制或服务器的实现方式。
jdt.ls是用Java编写的,基本上是一个小型的,无头的Eclipse JDT发行版,为各种客户端提供了全面的Java支持。
服务器部分本身是使用Eclipse LSP4J框架构建的。
它是如何工作的?
基本上,任何与语言服务器协议兼容的编辑器/ IDE(客户端)都可以启动jdt.ls,它将在内部初始化Eclipse IDE工作区,然后导入在客户端当前工作目录中找到的所有Java项目。
然后,当用户与Java文件进行交互时,客户端将向语言服务器提交请求:
服务器允许客户端为用户提供:
- 键入时报告分析和编译错误
- 代码完成
- 代码导航
- 编码镜(参考)
- 代码格式化
- 代码大纲
- 代码操作(快速修复)
- 强调
- Javadoc徘徊
- 类型搜索
构建类型
服务器寻找项目/构建描述符,以便正确配置Java支持(编译器级别,类路径)。 项目导入机制将按以下顺序查找构建描述符:
- 搜索* .gradle文件 :如果检测到Gradle项目,则导入将委派给Eclipse Buildship 。
- 搜索pom.xml文件 :如果检测到Maven项目,则导入将委派给Eclipse m2e 。
- 搜索Eclipse IDE .project文件 :这些项目将作为简单的Eclipse IDE项目导入。
根据项目类型,可以预期一些特定的行为:
- Gradle
- 依赖源会自动下载。
- 更改build.gradle依赖项需要显式的项目配置更新。
- 请注意,目前不支持Android项目。
- Maven
- 依赖源会自动下载。
- Maven错误在pom.xml中报告。
- 对pom.xml依赖项的更改将自动更新项目的类路径。
- Eclipse IDE
- 请注意,基于WTP的项目无法正确配置,因为JLS缺少所有WTP插件
独立文件
从任何项目上下文中获取单个Java文件上的信息都比较棘手。 Java工具没有有关编译文件所需的类路径的信息。 因此,对于该特定用例,类型检查错误被忽略,因为让客户端显示数十个编译错误没有用。 但是,服务器仍然可以分析文件中的语法错误,或者至少为默认的JDK类提供帮助。
支持的语言服务器协议功能
jdt.ls的当前实现支持大多数语言服务器协议v3 ,如下所述:
信息 |
支持的 |
---|---|
↩ 初始化 |
✔ |
↩ 关机 |
✔ |
➡ 出口 |
✔ |
✔ |
|
⬅window / showMessage |
✔ |
↪window / showMessageRequest |
✔ |
⬅window / logMessage |
✔ |
⬅ 遥测/事件 |
✘ |
➡window / didChangeConfiguration |
✔ |
➡window / didChangeWatchedFiles |
✔ |
✔ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
↩ 完成项目/解决 |
✔ |
✔ |
|
✘ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
✘ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
✔ |
|
↩documentLink /解决 |
✔ |
✘ |
但是jdt.ls还通过添加特定消息来增强默认的语言服务器协议:
信息 |
描述 |
---|---|
⬅语言/状态 |
将状态通知发送给客户端,以请求客户端在用户界面中显示特定消息。 通常在服务器启动期间使用 |
⬅语言/可操作通知 |
可操作的通知发送到客户端,以在用户界面中显示特定消息以及可能执行的命令。 这些命令必须在客户端上实现。 |
↩java / classFileContents |
客户端请求.class文件URI的内容,服务器返回源内容(如果有)。 |
➡java / projectConfigurationUpdate |
客户端请求项目配置更新,即将jdt.ls内部项目模型与项目构建描述符(Maven或Gradle)同步 |
与jdt.ls集成
安装
首先,请确保您有JDK 8来运行服务器。
可以从下载区域下载最新的jdt.ls压缩二进制文件 。 有一个到最新版本的稳定链接:
http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz
然后,您需要将服务器tar.gz解压缩到您选择的某个位置。
设置连接
jdt.ls支持套接字,命名管道以及服务器进程的标准流以与客户端进行通信。 客户端可以通过设置环境变量来传达其首选的连接方法。
- 默认情况下使用服务器进程的标准流(stdin,stdout)。
- 要使用名称管道,请在启动服务器之前设置以下环境变量。
STDIN_PIPE_NAME --> where client reads from
STDOUT_PIPE_NAME --> where client writes to
- 要使用普通套接字,请在启动服务器之前设置以下环境变量。
STDIN_PORT --> client reads
STDOUT_PORT --> client writes to
(可选)您可以设置套接字连接的主机值。
STDIN_HOST
STDOUT_HOST
对于套接字和命名管道,客户端应创建连接并等待服务器连接。
运行服务器
设置连接环境后,可以通过执行以下命令来运行jdt.ls:
/path/to/jdk/java -Declipse.application=org.eclipse.jdt.ls.core.id1 /
-Dosgi.bundles.defaultStartLevel=4 /
-Declipse.product=org.eclipse.jdt.ls.core.product /
-noverify -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication /
-jar /path/to/server/plugins/org.eclipse.equinox.launcher_.jar /
-configuration /path/to/server/config_mac /
-data /path/to/some/workspace/
- 您需要用org.eclipse.equinox.launcher jar的实际名称替换
server/plugins/org.eclipse.equinox.launcher_.jar
configuration
标志可以指向以下任意一个:- config_win,对于Windows
- config_mac,用于MacOS
- config_linux,对于Linux
data
标志值应该是服务器工作目录的绝对路径。 这应该与用户项目文件的路径(在initialize
握手期间发送)不同。
已知客户
开发人员工具社区在很大程度上接受了语言服务器协议范式,并启动了一些举措,旨在将jdt.ls集成到其他编辑器/ IDE中:
- Visual Studio代码 ,更多内容如下。
- Eclipse Orion ,请观看演示视频 。
- 日蚀车
- Vim
- 埃马克斯
- 原子
Visual Studio Code和Java语言扩展支持
参与jdt.ls项目的Red Hat团队还积极开发Visual Studio Code的Language Support for Java
扩展(又名vscode-java ,作为验证jdt.ls实现的一种方法。该扩展相当流行,在VS Code安装数量最多的扩展中排名前20位。
您可以从Visual Studio Marketplace或从命令面板安装它:
ext install java
下面的动画概述了VS Code中的Java支持:
结论
Eclipse JDT语言服务器已经是一项非常令人兴奋的技术,但是我们希望使其变得更好。 我们的目标是提供全面的重构功能以及Java调试器。 敬请期待!
jdt.ls和vscode-java都是在开源Eclipse Public License v1.0下开发的。 欢迎所有贡献,无论是代码,反馈,错误报告。 请在以下GitHub存储库中执行以下操作:
- Eclipse JDT语言服务器: https : //github.com/eclipse/eclipse.jdt.ls
- vscode-java: https : //github.com/redhat-developer/vscode-java/
这篇文章最初发表于2017年5月的Eclipse Newsletter:Language Server Protocol
有关更多信息和文章,请查阅Eclipse Newsletter 。
翻译自: https://jaxenter.com/eclipse-jdt-language-server-project-135429.html
jdt eclipse
所有评论(0)