jdt eclipse_Eclipse JDT语言服务器项目
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 |
✔ |
⬅textDocument / publishDiagnostics |
✔ |
➡textDocument / didChange |
✔ |
➡textDocument / did关闭 |
✔ |
➡textDocument / didOpen |
✔ |
➡textDocument / didSave |
✔ |
↩textDocument /完成 |
✔ |
↩ 完成项目/解决 |
✔ |
↩textDocument /悬停 |
✔ |
↩textDocument / Signature帮助 |
✘ |
↩textDocument /参考 |
✔ |
Document textDocument / documentHighlight |
✔ |
↩textDocument / documentSymbol |
✔ |
↩textDocument /格式 |
✔ |
Document textDocument / rangeFormatting |
✔ |
Document textDocument / onTypeFormatting |
✘ |
↩textDocument /定义 |
✔ |
↩textDocument / codeAction |
✔ |
Document textDocument / codeLens |
✔ |
↩codeLens /解析 |
✔ |
↩textDocument / documentLink |
✔ |
↩documentLink /解决 |
✔ |
↩textDocument /重命名 |
✘ |
但是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
jdt eclipse_Eclipse JDT语言服务器项目相关推荐
- 红帽、微软和 Codenvy 联合推出语言服务器协定(Language Server Protocol,LSP)项目
微软.红帽及容器开发环境供应商Codenvy本周在Red Hat DevNation开放源码大会上宣布将共同发展语言服务器协定(Language Server Protocol,LSP)项目,让不同的 ...
- 最值得阅读学习的 10 个 C 语言开源项目代码
本文转载于: 最值得阅读学习的 10 个 C 语言开源项目代码 从扩展思路的角度来说,一个程序员应该好好读过这样一些代码: 一个操作系统内核 一个编译器(如:gcc,lua) 一个解释器(如:pyth ...
- cwinthread*线程指针怎么销毁结束_最新版Web服务器项目详解 01 线程同步机制封装类...
点 击 关 注 上 方"两猿社" 设 为"置 顶 或 星 标",干 货 第 一 时 间 送 达. 互 联 网 猿 | 两 猿 社 基础知识 RAII RAII全称是"Resource Acq ...
- go语言编程项目_一个项目需要多少种编程语言?
go语言编程项目 编程语言的一大优点是多样性,您可以选择最佳的语言来解决任何给定的问题. 但是有时最坏的情况可能是项目利用此优势并构建需要许多不同语言的领域知识的应用程序或应用程序系统. 发生这种情况 ...
- 10大Go语言开源项目推荐
关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! Go语言诞生5周年!10大Go语言开源项目推荐 - Go语言中文网 - Golang中文社区 引用 2014年11月,Gol ...
- web服务器项目常见面试题目(C++)
项目介绍 1.为什么要做这样一个项目? 在学习CPP语言的时候,发现需要做一个项目来巩固一下,网上有推荐这个项目,然后就自己尝试做了一下.这个项目综合性比较强,从中既能学习Linux环境下的一些系统调 ...
- 图片服务器项目编写设计
待到秋来九月八,我花开后百花杀 项目背景 项目所涉及知识点 服务器设计 数据库设计 服务器API(前后端交互接口)设计 涉及知识点 正式设计接口功能(约定HTTP协议格式) 编写源代码开发 数据库操作 ...
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- 【牛客网C++服务器项目学习】-Day09-网络模型个人总结
项目学习地址:[牛客网C++服务器项目学习] day09 项目学习进入了第四章--网络编程.这一章的学习,前半段是对计算机网络体系进行一个大致的讲解.我自己在今年4月份系统性的看了<计算机网络自 ...
最新文章
- C#调用SCL2008 动态库SCL_API_cdecl.dll or SCL_API_Stdcall.dll,提示找不到指定模块
- 总结 @ 在 C# string 中的用法
- 最新版Xshell 6安装教程详解
- 服务器升级中不能修改信息,服务器升级页面
- java 接口式自定义回调函数
- python限制输入数字范围_关于python:如何限制Django模型中数字字段的最大值?
- https 方式使用git@osc设置密码的方式
- iOS学习笔记(1)— UIView 渲染和内容管理
- 自定义注解和注解的相关使用
- 一个jsp+cgi+html小工程,完成注册,后台使用CGI
- 数学建模学习17(最短距离、BP神经网络)
- 继美团重申严禁诱导强迫骑手注册成个体工商户后,饿了么也回应了
- 阿里云RDS在线DDL工具gh-ost
- MySQL数据库30条规范解读
- GMSSL :SM2椭圆曲线公钥密码算法——数字签名算法4
- 在微信中分享页面之调用微信sdk接口
- Linux基础知识之常见基本操作
- 芯片flash保护(解锁)
- 计算机名词解释剪切,剪切力名词解释
- 信号量相关问题典型案例