ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VSCode搭建SSM开发环境全攻略:从零配置到断点调试

VSCode搭建SSM开发环境全攻略:从零配置到断点调试 SSM 这个组合放在几年前是 Java 后端当之无愧的“标准答案”哪怕现在 Spring Boot 风头正盛很多学校课程、毕业设计、老项目维护里依旧是 Spring SpringMVC MyBatis 三件套。问题是绝大多数 SSM 教程默认你用 IDEA社区版动不动要折腾 Tomcat 插件旗舰版又要钱对机器配置一般的学生党或者习惯 VSCode 的人来说很不友好。我自己有段时间主力机是台 8G 内存的老笔记本IDEA 一开风扇就起飞后来干脆全程用 VSCode 写 SSM调通之后发现完全可行——编译、运行、打断点、看 MyBatis 日志都能搞定关键是一套配置写完能用到毕业。这篇文章我就把完整的搭建过程、工具选型思路和踩坑经验全部整理出来给想用 VSCode 跑 SSM 的人一条能直接照抄的路径。1. 内容整体设计与思路拆解1.1 为什么选择 VSCode 搭建 SSM 环境很多人一听“VSCode 写 Java”就摇头觉得它是轻量编辑器搞不了企业级框架。实际上 VSCode 的 Java 支持已经走了很远背后是 Eclipse JDT Language Server Java Debug Server编译和调试能力并不弱。对于 SSM 这种“Maven 管理依赖 Web 容器运行 断点调试”的开发模式VSCode 完全覆盖得了。我选 VSCode 的核心原因有三点资源占用低。IDEA 开一个中型 SSM 项目轻松吃掉 1.5G 内存VSCode 加上 Language Server 通常 700M 左右能打住老机器明显更跟手。配置透明。SSM 项目本质是 Maven 项目VSCode 里所有构建、运行、调试都围绕几份 JSON 配置展开出了问题能直接看到底层的命令和参数排查起来反而比 IDEA 的图形化封装更直观。统一生态。如果你平时还写前端、Python 或者服务器运维脚本VSCode 一个窗口全搞定不用在多个 IDE 之间切换。当然也得说清楚边界VSCode 适合 SSM 的中小型项目、课程作业和个人毕设。如果你要搞几十个模块的微服务大型工程IDEA 的企业级重构和代码分析确实更强没必要强行用 VSCode。1.2 方案选型一套完整工具链的含义所谓“搭建 SSM 项目环境”不只是装个编辑器而是要把从源码到运行的全部链路打通。一条完整的 SSM 开发环境包含六层层级组件作用JDKJDK 8 或 11编译和运行 Java 字节码构建工具Maven 3.6管理 jar 依赖、打包 war代码编辑器VSCode编写代码、查看结构Java 语言服务Extension Pack for Java语法提示、代码跳转、编译Web 容器Tomcat 8.5运行 Servlet/SpringMVC数据库MySQL 5.7数据持久化这六层缺一不可。很多人在 VSCode 里装了扩展却跑不起来就是因为中间某一层断掉了——最常见的是 JDK 版本和 Tomcat 版本不匹配、Maven 没配好本地仓库、项目编码不是 UTF-8。我的选型建议是JDK 8 Maven 3.6.3 Tomcat 8.5 MySQL 5.7这也是目前 SSM 老项目兼容性最好的组合。JDK 8 虽然老但市面上大量 SSM 毕设项目和公司老项目都跑在它上面从 JDK 11 开始模块化体系对反射、动态代理的限制会更严格容易在 Spring 老版本上出现奇怪的 Warning 甚至报错。1.3 这套方案能做什么、不能做什么用 VSCode 搭好 SSM 环境之后你至少能获得这些能力用 Maven 创建标准 SSM 项目结构三个层Controller、Service、Mapper的代码都有智能提示。一键编译、打包 war部署到本地 Tomcat 运行。打断点调试看变量值、调用栈和 IDEA 的 Debug 体验差距不大。查看 MyBatis 关联的 Mapper XML跳转 ResultMap 和 SQL。连接 MySQL执行 CRUD 操作。不太方便的地方也有VSCode 的 Spring 专业插件Spring Boot Tools主要面向 Spring Boot对 SSM 的 XML 配置智能提示有限代码重构能力不如 IDEA 强多人协作时遇到大量 XML 配置全局搜索替换效率稍低。但这些都不影响“能开发、能调试、能跑通”这个核心目标。2. 环境准备与核心配置细节2.1 JDK 与 Maven先解决底层依赖环境准备阶段最容易踩坑我按顺序说。第一步装 JDK 8这里不建议用 Oracle 官方安装包去 Adoptium 或阿里云镜像下载 OpenJDK 8 就行安装完配置 JAVA_HOME 环境变量。装完在终端执行java -version能输出版本号就说明成功了。第二步装 Maven。Maven 的作用是下载和管理项目依赖相当于“Java 界的包管理器”。从 Apache 官网下载 apache-maven-3.6.3-bin.zip解压到比如D:\dev\apache-maven-3.6.3然后配置 MAVEN_HOME 和 PATH 环境变量同样在终端用mvn -v验证。提示Maven 下载依赖默认走中央仓库国内网络很容易卡住。必须修改conf\settings.xml把镜像改成阿里云。这个文件是所有 Maven 项目全局生效的配置改完一劳永逸。配置示例mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror如果之前已经下载过不少依赖可以把本地仓库路径也换一下比如改成D:\dev\maven-repo避免系统盘越塞越满。2.2 VSCode 扩展清单不是装得越多越好VSCode 扩展装多了会拖慢启动速度SSM 开发只需要装好下面四类。Extension Pack for Java这是微软官方的 Java 全家桶包含语言服务、调试器、Maven 管理、项目视图。装完它才有代码提示和编译能力。Tomcat for Java社区里最常用的 Tomcat 插件能直接把 war 部署到本地 Tomcat 并启动。虽然功能简单但够用。MySQL官方数据库插件侧边栏里能直接看表结构、执行 SQL开发 CRUD 时非常方便。Spring Boot Extension Pack可选如果你之后有可能转 Spring Boot提前装上它里面有处理 XML 的 Spring Initializr 支持。装完后按CtrlShiftX打开扩展面板输入上述名字安装即可。注意插件安装之后VSCode 首次打开 Java 项目会进入“全量索引”阶段这时候 CPU 和内存会比较高等右下角进度条消失再开始写代码。2.3 settings.json 与工作区配置VSCode 用 JSON 管配置SSM 开发建议把下面几项写进全局settings.json按Ctrl,打开设置点击右上角文件图标进入 JSON 编辑{ java.home: D:\\dev\\jdk1.8.0_202, java.configuration.updateBuildConfiguration: automatic, java.compile.nullAnalysis.mode: disabled, maven.executable.path: D:\\dev\\apache-maven-3.6.3\\bin\\mvn.cmd, terminal.integrated.env.windows: { JAVA_HOME: D:\\dev\\jdk1.8.0_202, MAVEN_HOME: D:\\dev\\apache-maven-3.6.3 }, files.encoding: utf8, [xml]: { files.encoding: utf8 } }这里解释几个关键点。java.home是给 Java 语言服务指定 JDK如果电脑里装了多个 JDK不指定它就可能用错版本导致编译失败。java.configuration.updateBuildConfiguration设为 automatic可以保证 pom.xml 一修改VSCode 自动刷新依赖。files.encoding强制 UTF-8这是中文不乱码的基石。2.4 数据库准备SSM 项目基本都要连 MySQL。先在本机装好 MySQL 5.7 或 8.0Window 上推荐用官方 InstallerLinux 推荐 Docker 安装然后建库建用户CREATE DATABASE ssm_demo DEFAULT CHARACTER SET utf8mb4; CREATE USER ssmlocalhost IDENTIFIED BY ssm123456; GRANT ALL PRIVILEGES ON ssm_demo.* TO ssmlocalhost; FLUSH PRIVILEGES;之后 VSCode 里用 MySQL 插件填上连接信息侧边栏就能看到数据库调试 SQL 时不用切窗口。3. SSM 项目骨架与核心代码配置3.1 用 Maven 创建项目的两种方式方式一命令行创建在 VSCode 里按 Ctrl 打开终端执行mvn archetype:generate \ -DgroupIdcom.example \ -DartifactIdssm-demo \ -DarchetypeArtifactIdmaven-archetype-webapp \ -DinteractiveModefalse注意maven-archetype-webapp创建的是 Web 应用骨架SSM 是 Web 项目必须用它而不是默认的 quickstart。命令跑完后项目目录会出现 src 文件夹和 pom.xmlVSCode 会自动识别为 Maven 项目。方式二VSCode 命令面板创建按CtrlShiftP输入Java: Create Java Project选择 Maven 类型然后选择webapp原型。这种方式效果和命令行一样只是图形化一点。我个人更推荐方式一因为跑命令能直观看到 Maven 依赖下载过程哪个依赖卡住了、哪个仓库报 401一眼就能定位。3.2 pom.xmlSSM 依赖的黄金组合创建项目后先改 pom.xml。SSM 的依赖搭配在社区里已经很统一我用的是经过大量项目验证的组合properties maven.compiler.source1.8/maven.compiler.source maven.compiler.target1.8/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding spring.version5.1.8.RELEASE/spring.version /properties dependencies dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version${spring.version}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version${spring.version}/version /dependency dependency groupIdorg.springframework/groupId artifactIdspring-jdbc/artifactId version${spring.version}/version /dependency dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.4.6/version /dependency dependency groupIdorg.mybatis/groupId artifactIdmybatis-spring/artifactId version1.3.2/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.47/version /dependency dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.1.17/version /dependency dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version3.1.0/version scopeprovided/scope /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId version1.2/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.9.8/version /dependency /dependencies版本选择这里要单独说。Spring 5.1.8 是我反复试下来最稳妥的版本和 Java 8、Tomcat 8.5、MyBatis 3.4.6 都能友好相处。有人喜欢用 Spring 5.2但如果你项目里用到老版分页插件或者自定义类型处理器新版本有时会引入不必要的兼容问题。SSM 讲究“稳”不是“新”。3.3 SSM 三层核心配置XML 到底是干什么的很多新手对 Spring 配置文件感到头疼我拆开说清楚。SSM 有三份关键 XML各自管一块src/main/resources/ ├── applicationContext.xml -- Spring 的全局容器配置 ├── spring-mvc.xml -- MVC 层配置 ├── mybatis-config.xml -- MyBatis 全局配置 └── jdbc.properties -- 数据库连接信息jdbc.propertiesjdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/ssm_demo?useUnicodetruecharacterEncodingutf8useSSLfalse jdbc.usernamessm jdbc.passwordssm123456applicationContext.xml非 MVC 的 Bean 都归这里管?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd context:property-placeholder locationclasspath:jdbc.properties/ bean iddataSource classcom.alibaba.druid.pool.DruidDataSource property namedriverClassName value${jdbc.driver}/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ /bean bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean property namedataSource refdataSource/ property nameconfigLocation valueclasspath:mybatis-config.xml/ property namemapperLocations valueclasspath:mapper/*.xml/ /bean bean classorg.mybatis.spring.mapper.MapperScannerConfigurer property namebasePackage valuecom.example.mapper/ /bean context:component-scan base-packagecom.example.service/ /beans这里的逻辑是数据源Druid给 SqlSessionFactory 提供连接SqlSessionFactory 扫描 mapper XMLMapperScannerConfigurer 负责把接口代理注册成 Spring Beancomponent-scan 扫到 Service 层的 Service 注解。理解这条链后面遇到“Service 的 AI 接口注入失败”就能立刻反应到是扫描路径写错了。spring-mvc.xml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd context:component-scan base-packagecom.example.controller/ mvc:annotation-driven/ bean classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameprefix value/WEB-INF/views// property namesuffix value.jsp/ /bean /beans要点是mvc:annotation-driven/不能省它负责注册处理器映射和消息转换器是 Controller 里方法能正常返回 JSON 的前提。ViewResolver 把 Controller 返回的字符串对应到 JSP 页面。mybatis-config.xml?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration settings setting namemapUnderscoreToCamelCase valuetrue/ setting namelogImpl valueSTDOUT_LOGGING/ /settings typeAliases package namecom.example.entity/ /typeAliases /configurationmapUnderscoreToCamelCase自动把数据库的 user_name 映射到实体的 userName少写大量 ResultMap。3.4 web.xml连接 Spring 与 Tomcat 的桥梁SSM 是传统 Web 项目必须通过src/main/webapp/WEB-INF/web.xml让 Tomcat 认识 Spring?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd version3.1 display-namessm-demo/display-name context-param param-namecontextConfigLocation/param-name param-valueclasspath:applicationContext.xml/param-value /context-param listener listener-classorg.springframework.web.context.ContextLoaderListener/listener-class /listener servlet servlet-namedispatcher/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-valueclasspath:spring-mvc.xml/param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namedispatcher/servlet-name url-pattern//url-pattern /servlet-mapping filter filter-nameencoding/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param /filter filter-mapping filter-nameencoding/filter-name url-pattern/*/url-pattern /filter-mapping /web-app通常毕设项目还会在这里加 Druid 监控 Servlet 或者 Shiro 过滤器但核心就是上面这段ContextLoaderListener 创建 Spring 父容器DispatcherServlet 创建 MVC 子容器父子容器各扫各的包不会重复管理 Bean。3.5 写一个能跑通的 Demo配置全通之后写一个最简 CRUD 接口验证环境。先建表CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), email VARCHAR(100) );然后是三个层// entity/Student.java package com.example.entity; public class Student { private Integer id; private String name; private String email; // getter/setter 省略 }// mapper/StudentMapper.java package com.example.mapper; import com.example.entity.Student; public interface StudentMapper { Student findById(Integer id); }对应的 mapper XML 文件src/main/resources/mapper/StudentMapper.xml?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.mapper.StudentMapper select idfindById parameterTypeint resultTypecom.example.entity.Student SELECT * FROM student WHERE id #{id} /select /mapper// service/StudentService.java package com.example.service; import com.example.entity.Student; public interface StudentService { Student getStudentById(Integer id); }// service/impl/StudentServiceImpl.java package com.example.service.impl; import com.example.entity.Student; import com.example.mapper.StudentMapper; import com.example.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; Service public class StudentServiceImpl implements StudentService { Autowired private StudentMapper studentMapper; Override public Student getStudentById(Integer id) { return studentMapper.findById(id); } }// controller/StudentController.java package com.example.controller; import com.example.entity.Student; import com.example.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/student) public class StudentController { Autowired private StudentService studentService; GetMapping(/{id}) public Student getStudent(PathVariable Integer id) { return studentService.getStudentById(id); } }到这里SSM 项目的代码骨架已经成型剩下的是如何让它在 Tomcat 里跑起来。4. 在 VSCode 中运行与调试4.1 方案一Tomcat 插件部署 war 包安装 Tomcat for Java 插件后按CtrlShiftP输入Tomcat: Add选择 Tomcat 安装目录。插件能识别常见的 Tomcat 8.5/9.0配置好后侧边栏会出现 Tomcat Servers 面板。打包 war 有两种方式命令行mvn clean package -DskipTests在 target 目录得到 ssm-demo.war。图形化在 pom.xml 上右键选择 Maven - Package效果一样。拿到 war 后在 Tomcat Servers 面板右键 -Redploy插件会把 war 复制到 Tomcat webapps 目录并启动。启动成功后浏览器访问http://localhost:8080/ssm-demo/student/1能看到 JSON 数据就说明整套流程全通了。插件的优势是省事缺点是日志输出不完整、控制台格式不太舒服。所以我实际开发中更常用第二种方式。4.2 方案二脚本启动本地 Tomcat这是我最推荐的方式也是排障最方便的方式。先用mvn clean package -DskipTests打 war然后把 war 复制到 Tomcat 的 webapps 目录接着在 VSCode 终端里直接启动 Tomcat# Windows cd D:\dev\apache-tomcat-8.5.xx\bin catalina.bat run # macOS / Linux cd /opt/apache-tomcat-8.5.xx/bin ./catalina.sh run重点是用run而不是startup。run会把 Tomcat 日志直接打到当前终端Spring 容器初始化了哪些 Bean、MyBatis 加载了哪个 XML、SQL 语句实际是什么全都能实时看到。排查 SSR 启动失败问题时这些日志比任何 GUI 工具都管用。为了减少手工复制 war 的操作我一般会写一个简单的部署脚本echo off mvn clean package -DskipTests copy target\ssm-demo.war D:\dev\apache-tomcat-8.5.xx\webapps\4.3 Debug 调试配置断点怎么打VSCode 调试 Java 和 IDEA 逻辑类似。按F5选择环境 Java如果项目还没有 launch.jsonVSCode 会提示生成。SSM 项目调试需要配置 attach 模式先启动 Tomcat开启调试端口再让 VSCode 连接调试端口。修改 Tomcat 的bin/catalina.bat或 catalina.sh在顶部加上JPDA_ADDRESS8000 JPDA_TRANSPORTdt_socket然后启动catalina.bat jpda run再创建.vscode/launch.json{ version: 0.2.0, configurations: [ { type: java, name: Attach to Tomcat, request: attach, hostName: localhost, port: 8000, sourcePaths: [ ${workspaceFolder}/src/main/java ] } ] }配置好后在 Controller 方法上打一个断点按 F5 启动调试浏览器访问对应接口就会停在断点处。左侧 Variables 窗口能看到参数、局部变量、SQL 查询结果和 IDEA Debug 体验差距不大。注意attach 调试必须保证代码和 Tomcat 里跑的 war 是同一版本否则断点位置会错乱。每次改完代码先重新 package 再部署确保调试的是当前源码。5. 常见问题与排查技巧实录5.1 中文乱码从请求到数据库全链路排查乱码是 SSM 里最高发的问题本质上是一层一层编码不一致导致的。排查顺序按数据流动方向来浏览器发请求确认前端页面是 UTF-8 meta 标签Tomcat 的 server.xml 里 Connector 加上URIEncodingUTF-8。后端接收web.xml 里 CharacterEncodingFilter 的 filter-mapping 必须配/*不是/很多人漏掉这一步导致 POST 正文乱码。数据库存储MySQL 连接 URL 加characterEncodingutf8建表库用 utf8mb4如果这个没法改在 JDBC URL 上加useUnicodetrue。实操经验是把上面的配置全部统一成 UTF-8 后再遇到乱码直接看 MySQL 连接 URL 里的characterEncoding十个里面有八个是这里没对齐。5.2 编译报错找不到符号或无法跳转出现这类问题时先确认三件事右下角 Java 语言服务是不是还在初始化。项目第一次打开要等它加载完否则提示全是临时状态。pom.xml 有没有自动刷新。改完依赖后按CtrlShiftP运行Java: Reload Projects强制刷新。项目是否被正确识别为 Maven 项目。关闭 VSCode 重新打开如果右上角没有 Maven 图标说明 Maven 配置没生效检查maven.executable.path。5.3 Maven 依赖下载失败依赖下载失败最常见的原因是网络连中央仓库超时。改完 settings.xml 镜像后在终端跑mvn clean compile验证如果还失败把本地仓库里的.lastUpdated后缀缓存文件删掉# Windows cd %userprofile%\.m2\repository for /r %i in (*.lastUpdated) do del %i # macOS / Linux find ~/.m2/repository -name *.lastUpdated -delete删完再编译一次Maven 会重新下载损坏的依赖。5.4 Tomcat 端口被占用或启动即退出Tomcat 启动后立刻退出的原因是在 VSCode 终端里用了startup.bat。startup.bat会新开一个控制台窗口如果你在 SSH 远程开发或者跑在受限终端环境下那个新窗口可能直接闪退。这种情况下要么改用catalina.bat run要么查看 Tomcat 的logs/catalina.out日志。端口被占用时8080 常见被其他服务抢了排查命令# Windows netstat -ano | findstr 8080 # macOS / Linux lsof -i:8080找到 PID 后结束进程或者修改 server.xml 里的 Connector port。5.5 调试断点不生效断点不生效的原因百分之九十是代码版本不一致。Tomcat 里跑的 war 还是旧版本VSCode 里的源码已经改了。解决办法只有一条重新 package 部署不要试图在 IDE 里硬刷。另外注意Debug 模式下 Tomcat 启动会比正常慢很多等日志出现Listening for transport dt_socket at address: 8000再连接调试端口。5.6 MyBatis 绑定异常Invalid bound statement这个报错的意思是 Mapper 接口找到了但对应的 SQL 没找到排查三步检查 mapper XML 的 namespace 是否和接口全限定名一致不一致必报。检查 applicationContext.xml 里 mapperLocations 路径是否覆盖到 XML 文件。路径写成classpath:mapper/*.xml时XML 必须放在src/main/resources/mapper/下。package 后确认 war 里的 classes 目录包含 XML 文件如果被过滤掉了在 pom.xml 里加resources resource directorysrc/main/java/directory includes include**/*.xml/include /includes /resource /resources6. 最终实操补充与项目扩展方向SSM 环境跑通之后其实你已经掌握了“VSCode 管理 Java Web 项目”的通用方法Maven 负责生命周期Language Server 负责代码智能Tomcat 脚本负责运行launch.json 负责调试。这套模式不止适用于 SSM换成 Spring Boot 或者纯 Servlet 项目链路思路一模一样。我个人的实操体会是VSCode 搭 SSM 最大的门槛不是技术而是习惯。很多人第一次打开 VSCode 发现没有 IDEA 的自动导入快捷键、没有可视化 Entity 生成器就觉得寸步难行。实际上把这些操作映射到命令面板和脚本之后效率并不差。另外一个小技巧是给我推荐每次都把 Maven 的常用命令记在终端历史里mvn clean package -DskipTests catalina run这条命令可以直接绑定到 VSCode 的 Task.vscode/tasks.json里做到一键构建、一键启动。如果你按这篇文章配完还遇到其他问题优先看 Tomcat 终端里的日志SSM 运行期的绝大多数报错日志第一行就写着答案。
返回列表