用VSCode写Java的艰辛过程(笑)

本文详细介绍如何在VSCode中配置Java开发环境,包括安装必要插件、设置环境变量、解决常见编译问题,以及如何打包Java项目为jar文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-1. 首先之前…

因为以后大概不会用java写代码所以坚持不安装java的ide.

0. 首先…

  • vscode 安装插件 Java Extension Pack
  • vscode 安装插件 Code Runner

在vscode的用户设置里, 我添加了这两项

 "code-runner.runInTerminal": true,
 "code-runner.clearPreviousOutput": true,

然后写好代码, 右键run就可以运行了…


1. 找不到javac ?

先卸载并重新安装 Java & JDK,
注意: 不要安装在同一个目录, 否则会导致找不到 javac.exe
参考问题: https://www.zhihu.com/question/28428426

然后添加环境变量:
添加环境变量

2. 编码GBK的不可映射字符?

注释中出现了中文于是无法编译…
在javac编译命令后应该指出编码: javac -encoding utf-8 …
于是修改用户设置

"code-runner.executorMap": {
        "java": "cd $dir && javac -encoding utf-8 $fileName && java $fileNameWithoutExt"
    },

继续开心的写代码, 然后又出现了问题…

3. 错误: 找不到符号…

为了更好地组织类(笑), 我将当前项目的所有代码组织在同一个package中,
package TradeSystemDemo;
并且将他们放在对应的目录下:
目录
如果这个时候, 右键Main并Run Code, 会找不到Console等其他类…提示 ‘错误: 找不到符号’.
检查vscode终端的命令, 会发现cd进入了package所在的文件夹, 所以编译会出错.
在这里插入图片描述
所以应该在项目根目录上执行javac命令, 所以在vscode的工作区设置中加上: (用户设置是全局的, 工作区设置只针对当前工作区)

"code-runner.executorMap": {
        "java": "cd $workspaceRoot && javac -encoding utf-8 -d . TradeSystemDemo/Main.java && java TradeSystemDemo/Main",
    }
  1. 第一个命令
    cd $workspaceRoot
    使进入工作区根目录.
  2. 然后是编译命令,
    javac -encoding utf-8 -d . TradeSystemDemo/Main.java
    (以上设置放在工作区的原因就是每个项目的Main.java的路径不一样…取决于它放在哪个package文件夹下)
  3. 最后是运行程序的命令
    java TradeSystemDemo/Main
    现在就可以在Vscode中右键任意代码并Run Code了.

然而…

4. 如果要打包成jar

这里参考了 http://it-easy.tw/java-jar/ .
对于我的项目, 打包Jar的命令如下, 这也是在工作区根目录上执行的:
jar cvfm TradeSystem.jar Manifest.MF TradeSystemDemo/*.class
于是我写了一个bat, 完成编译和打包jar

javac -encoding utf-8 -d . TradeSystemDemo/Main.java
jar cvfm TradeSystem.jar Manifest.MF TradeSystemDemo/*.class
pause

把这个bat放在工作区根目录上, 写好代码后运行就好了.
如果要运行打包后的jar文件的话…也用一个bat就好了

java -jar TradeSystem.jar
pause

一天下午就这么过去了…真想用C#啊可是实验课要求用java…明天就把这个实验做完吧…

<think>我们注意到用户的问题已经从IDEA切换到了VSCode,但核心问题相似:无法自动补全Object类方法(如equals)和@Override注解报错。虽然环境不同,但根本原因可能类似,主要集中在开发环境配置和依赖管理上。根据用户提供的引用,我们注意到引用[1]和[2]提到了Java集合操作的一些陷阱(如ArrayList的subList类型转换问题和Arrays.asList返回的列表不可变),但这与当前问题关联不大。引用[3]展示了一个SpringBoot项目中的查询代码,暗示用户可能在复杂项目环境中遇到此问题。由于用户明确提到使用VSCode,我们将重点转向VSCodeJava支持机制(通过扩展实现,主要是RedHat的"LanguageSupportforJava™byRedHat"和"ProjectManagerforJava"扩展)。常见原因分析:1.**项目未正确构建**:VSCode可能未正确识别项目结构,导致JDK核心类方法无法补全。2.**JDK版本问题**:项目配置的JDK版本与VSCode使用的JRE不一致。3.**Lombok支持未启用**:如果项目使用Lombok,VSCode需要额外配置。4.**注解处理器未运行**:手动重的equals方法需要注解处理器支持(Lombok或MapStruct等)。5.**VSCodeJava扩展设置问题**:自动补全功能可能被意外关闭。解决方案:###步骤1:检查VSCodeJava环境配置1.**确认已安装必要扩展**:-JavaExtensionPack(包含RedHat的Java支持)-LombokAnnotationsSupport(如果使用Lombok)2.**设置JDK版本**:-按`Ctrl+Shift+P`打开命令面板→输入`Java:ConfigureJavaRuntime`→检查项目使用的JDK版本。-在项目根目录创建`.vscode/settings.json`,明确指定JDK版本:```json{"java.configuration.runtimes":[{"name":"JavaSE-17","path":"C:/ProgramFiles/Java/jdk-17",//替换为实际路径"default":true}]}```###步骤2:启用注解处理和Lombok1.**配置Lombok**(如项目使用):-在`settings.json`中添加:```json"java.jdt.ls.vmargs":"-javaagent:lombok.jar",//指向Lombokjar的绝对路径"java.annotations.lombokSupport.enabled":true```-确保项目依赖了Lombok(Maven/Gradle配置正确)。2.**启用注解处理**:-在Maven项目的`pom.xml`中配置注解处理器(参考之前IDEA方案中的Lombok配置)。-在VSCode中触发项目重建:命令面板→`Java:CleantheJavalanguageserverworkspace`→重启VSCode。###步骤3:验证代码补全功能1.创建一个简单的测试类:```javapublicclassTest{@Overridepublicbooleanequals(Objectobj){//检查@Override是否报错returnsuper.equals(obj);}}```2.输入`eq`后按`Ctrl+Space`强制触发补全,应出现`equals`提示。###步骤4:处理特殊项目结构如果项目是多模块项目(如引用[3]中的SpringBoot项目):-在VSCode中打开项目根目录(包含父pom.xml的目录)。-确保所有子模块都被正确识别:查看JavaProjects视图(Ctrl+Shift+P→`Java:OpenJavaProjectsView`)。###步骤5:重置语言服务器若问题依旧,尝试:-删除项目目录下的`.project`和`.classpath`文件(如果有)。-命令面板→`Java:CleantheJavalanguageserverworkspace`→选择`Restartanddeletefromdisk`。###验证结果在重equals的类中:-`@Override`应不再报错。-输入对象名后按`.`,在建议列表中应看到`equals`、`hashCode`等方法。###相关问题1.如何在VSCode中为不同Java项目配置独立的JDK版本?2.Lombok在VSCode中需要哪些额外配置才能正常使用@Data注解?3.为什么在多模块Maven项目中VSCode有时无法识别子模块的依赖?4.除了Lombok,还有哪些工具可以自动生成Java实体类的equals/hashCode方法?5.VSCodeJava语言服务器崩溃后如何自动恢复?注:引用[1][2]提到的集合操作问题虽不直接相关,但在重equals方法时可能涉及集合比较,需注意不可变集合的陷阱[^2]。</think>### VSCodeJava代码无法自动补全Object类方法及@Override注解报错排查 #### 问题原因分析 1. **语言服务器未完全初始化** VSCodeJava支持依赖[Java Language Server](https://github.com/eclipse/eclipse.jdt.ls),项目加载不完整会导致Object类方法识别失败。 2. **Lombok支持未启用**(关键因素) 引用[4]显示Lombok需要特殊配置: ```json "java.jdt.ls.vmargs": "-javaagent:lombok.jar" ``` 未配置会导致: - `equals()`/`hashCode()`无法补全 - `@Override`误报未重错误 3. **JDK路径配置错误** VSCode未正确指向项目使用的JDK版本(特别是多版本共存时)。 4. **项目构建工具集成故障** Maven/Gradle项目未正确加载依赖,导致核心类库缺失。 5. **缓存未更新** 语言服务器缓存未刷新会导致过时代码分析结果。 #### 解决方案 ##### 步骤1:检查基础配置 1. **验证Java扩展** - 确保安装官方扩展包: `Extension Pack for Java` (Microsoft) - 检查扩展是否启用(禁用其他Java相关扩展避免冲突) 2. **配置JDK路径** 在`.vscode/settings.json`添加: ```json { "java.home": "C:/Program Files/Java/jdk-17", // 替换实际路径 "java.configuration.runtimes": [ { "name": "JavaSE-17", "path": "C:/Program Files/Java/jdk-17" } ] } ``` ##### 步骤2:修复Lombok问题 1. **添加Lombok配置** 在VSCode设置(`settings.json`)中: ```json { "java.jdt.ls.vmargs": "-javaagent:${workspaceFolder}/path/to/lombok.jar", "java.annotations.lombokSupport.enabled": true } ``` > 注意:`lombok.jar`路径需替换为实际位置 2. **项目依赖配置** 在Maven的`pom.xml`中确保包含: ```xml <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> </dependencies> ``` ##### 步骤3:重建项目索引 1. **手动触发重建**: - 打开命令面板 (`Ctrl+Shift+P`) - 执行 `Java: Clean Java Language Server Workspace` - 选择 `Restart and delete from disk` 2. **重新加载项目**: - 关闭所有Java文件 - 执行 `Java: Reload All Java Projects` ##### 步骤4:验证功能恢复 创建测试文件 `Test.java`: ```java public class Test { private String id; @Override // 应不再报错 public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Test test = (Test) o; return id != null ? id.equals(test.id) : test.id == null; } public static void main(String[] args) { Test obj = new Test(); obj. // 此处输入"."应出现equals()提示 } } ``` #### 高级故障排除 如果问题仍存在: 1. **检查语言服务器日志**: - 命令面板执行 `Java: Open Java Language Server Log File` - 查找 `Object.class` 相关加载错误 2. **降级Java扩展**: - 安装历史版本扩展(有时新版存在兼容问题) - 在扩展页面点击 ⚙️ → `Install Another Version` 3. **创建最小化测试项目**: ```bash mkdir test-project && cd test-project mvn archetype:generate -DgroupId=com.test -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false code . ``` #### 相关问题 1. 如何为VSCode多模块Maven项目配置不同的JDK版本? 2. Lombok的`@Data`注解在VSCode中需要哪些额外配置才能正常工作?[^4] 3. 为什么修改作为HashMap键的对象属性会导致数据访问异常?[^3] 4. 如何在VSCode中查看Java语言服务器的实时运行状态? 5. 除了Lombok,还有哪些VSCode扩展可以简化Java实体类开发? 6. 阿里Java规约插件对`@Override`注解有哪些强制要求?[^2] [^1]: ArrayList的subList类型转换限制 [^2]: Arrays.asList返回不可变集合 [^3]: 对象属性修改导致hashCode变化 [^4]: Lombok必须配置Java代理
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值