vscode + gradle 创建 java 项目 - java language server无法启动

Posted rldts

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode + gradle 创建 java 项目 - java language server无法启动相关的知识,希望对你有一定的参考价值。

1、在系统上安装一个版本的gradle,用`gradle init --type java-application`创建一个默认的java项目,假设项目目录是hellojava

2、vscode写java首先要安装Java Extension Pack(下面简称JEP),这个扩展会自带两个依赖项安装,一个是Debugger for java,还有一个的language support for java by red hat,这些是利用Eclipse的JDT实现的java语言支持

然后把hellojava文件夹添加到vscode的工作区,JEP会自动识别该gradle项目并通过JDT将该项目集成到vscode中,出现以下事件则说明正确识别了:

2.1、在状态栏会看到Starting Java Language Server...并成功走到100%,这个步骤JEP根据你的gradlew(windows下是gradle.bat)下载安装了对应版本的gradle(仅用于该java项目,不是系统全局的)

2.2、hellojava中与build.gradle同目录下出现了.project和.classpath文件(Eclipse的东西),说明JEP已经利用JDT关联好你的gradle java项目了

2.3、hellojava中与build.gradle同目录下出现了bin文件夹,里面是你src中java文件对应的class文件,说明vscode已经利用JEP下载的gradle帮你build好了该项目(是的,你不用手动去打gradle build命令,自动build),但是注意,这里vscode的JEP利用gradle只会帮你生成class文件用于debug(你只需要编辑你的java文件并按F5进行debug即可),并不等价于gradle build命令,gradle build命令还会帮你做unit testing、打包jar等等,另外,你手动敲gradle build生成的东西都在build目录下,而不是bin目录下,bin目录下的东西是vscode按F5调试时候找的class文件,而build目录下的class文件是gradle run运行的,要注意区别

 

 

3、最近发现通过deb包安装的vscode突然无法正确build和debug java项目了,出现以下症状(不一定同时出现):

3.1、bin目录中的class文件无法与src中的java文件同步,修改了java文件,class文件貌似没有被重新编译

3.2、bin目录中的class文件全部消失

3.3、F5启动项目报错,大意是:找不到主类

3.4、“输出”里面发现JEP报错,大意是无法从gradle.4.x.bin.zip安装gradle(说明#2.1中的步骤失败了),同时,打开项目中java文件的时候,状态栏有个大拇指朝下(鄙视的手势),点击后跳到“输出”的报错界面;这里还有一种报错方式就是告诉你无法同步项目的状态,其实也是表示JDT无法同步你的gradle项目

 

4、我估计了一下,出现#3中描述的问题,估计是因为权限问题,JEP无法成功安装gradle并启动Java Language Server,为什么这么说,因为deb包安装的时候是要输入sudo的密码的,安装在/usr/share目录下,而启动vscode是没有用sudo的

4.1、测试了一下,sudo启动vscode,就不会出现#3中的问题了,但是带来的问题就是不用sudo就没法用vscode了

4.2、那么解决办法就是把vscode安装到/home目录下,不用deb包安装,直接下载tar.gz包解压到/home目录下,这样就不存在权限问题了

 

备注:其实一开始我用deb包安装的vscode写gradle的java项目也是好好的,也没出现上面#4所谓的“权限问题”,但是昨天不知道抽什么风就突然不能用了,折腾半天才按上面的步骤解决,真尼玛扯蛋

以上是关于vscode + gradle 创建 java 项目 - java language server无法启动的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 和 VSCode:Gradle 构建错误

Gradle Docker 下载依赖项

使用 Gradle 将依赖项添加到运行时映像

在 VScode 和 Android Studio 中使用 Gradle 进行颤振时出错

使用 gradle 的多项目测试依赖项

如何使用 Gradle 创建具有实现依赖项的可执行胖 jar