拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Java环境搭建:JDK、Maven、MySQL、Tomcat、IDEA五件套

Java环境搭建:JDK、Maven、MySQL、Tomcat、IDEA五件套

每次带新人,最先卡住我的都不是代码怎么写,而是环境搭不起来。IDEA装完打不开项目、JDK环境变量配了三遍命令提示符还是提示"不是内部或外部命令"、Maven下个依赖慢得像拨号上网、MySQL装完root密码忘了、Tomcat双击窗口一闪就没了。JDK、Maven、MySQL、Tomcat、IDEA这五件套几乎是每个Java Web开发的起跑线,但它偏偏没有一个官方打包好的"一键安装",全靠自己拼。这篇就把这套环境从零搭到能跑通一个Web项目的全过程拆开讲,包括版本怎么选、目录怎么规划、每一步背后的原因、以及我在实际带人过程中反复见到的坑。不管你是刚学Java的学生,还是接手一台新电脑要重装环境的老手,都能照着走一遍。

1. 先把版本选型和目录规划定下来

环境搭建最容易翻车的地方,从来不是某个软件装不上,而是一堆版本互相不兼容。我见过太多次"JDK装的最新版、Tomcat下的最新版、项目里的依赖又是三年前的",最后启动报一堆名字看不懂的异常。所以动手之前,先把版本和目录这两件事敲定,后面能省掉至少一半的返工。

1.1 这五件套各自扮演什么角色

先用一个生活化的比喻把这套组合讲清楚。JDK是发动机,代码最终要靠它编译和运行;Maven是采购员加仓库,负责把项目需要的第三方jar包按需下载、统一管理版本;MySQL是账本,业务数据都存这里;Tomcat是货架,把写好的Web应用摆上去对外提供服务;IDEA是工作台,前面四样东西在它里面被串起来,写代码、跑测试、打包、启动服务都在同一个界面完成。

理解了这个分工,你就明白为什么它们的版本必须互相照顾。IDEA要调用JDK来编译,Maven要跑在JDK之上,Tomcat本身也是Java写的、运行时依赖JDK,项目通过JDBC驱动连MySQL。任何一环的版本超出另一环的支持范围,链条就断了。这也是为什么我不建议"每个软件都装最新版"——最新不等于最稳。

1.2 一套经得起考验的版本组合

下面这套组合是我在多个项目、多台机器上反复用过的,适合学习、做课程设计、开发中小型Web项目:

组件推荐版本关键说明
JDK17(LTS)或 8老项目锁死JDK8;新项目直接用17
Maven3.9.x3.9要求运行在JDK8及以上
MySQL8.0.x默认字符集utf8mb4,认证插件有变化
Tomcat9.0.x面向javax.servlet,兼容面最广
IDEA2023.x 及以上社区版免费,旗舰版需商业授权

这里必须单独讲一个坑:Tomcat 10 开始把Servlet API的包名从javax.servlet改成了jakarta.servlet。这意味着所有基于javax的老项目、以及Spring Boot 2.x的工程,放在Tomcat 10或11上会直接报ClassNotFoundException。反过来,Spring Boot 3.x用的是jakarta,扔到Tomcat 9上也不行。所以新手阶段我更推荐Tomcat 9,生态兼容性最好,网上教程也基本都是围绕它写的。

JDK同理。JDK 8依然是很多企业项目的基线,JDK 11和17是LTS(长期支持版),JDK 21也是LTS。非LTS版本(比如JDK 9到16之间的奇数版本)生命周期短,只适合尝鲜。如果你只是想学Servlet/JSP,JDK 8加Tomcat 9是最稳的组合;如果打算跟着新教程学Spring Boot 3,那就JDK 17加Tomcat 9(用内嵌或外置都行,注意API包名)。

1.3 安装顺序和统一目录规划

顺序上建议按JDK → Maven → MySQL → Tomcat → IDEA来。原因是后面几个都依赖JDK,IDEA又要在启动后配置前四者的路径,放在最后装可以一次性绑好。

目录规划这件事被太多人忽略。默认安装路径要么在C盘Program Files,要么带一堆空格和中文,Maven和Tomcat对带空格的路径偶尔会出问题。我的习惯是在非系统盘建一个统一的开发目录:

D:\dev\ ├── jdk-17\ ├── apache-maven-3.9.6\ ├── apache-tomcat-9.0.85\ ├── mysql-8.0.36\ ├── maven-repo\ (Maven本地仓库) └── workspace\ (IDEA项目工作区)

好处有三个:一是路径短、无空格无中文,命令行操作和脚本引用都不容易出错;二是以后换电脑直接整盘拷贝,环境基本能复用;三是卸载或重装时不用去系统目录里翻残留。注意版本号最好保留在目录名里,这样你同时装JDK 8和17时不会搞混。

注意:安装路径里绝对不要出现中文和空格。这不是迷信,Maven在解析本地仓库路径、Tomcat在加载web应用时都可能因此报错,而且报错信息往往不指向真正原因,排查起来很费时间。

2. JDK的安装与环境变量配置

JDK是整套环境的地基,它配不好,后面Maven和Tomcat全是白搭。这一节我把下载、安装、环境变量、验证四步讲透,尤其是环境变量部分,很多教程只给配置项不讲原理,导致一换机器就不会配。

2.1 下载渠道与版本选择

JDK现在有多个发行版可选,功能核心都来自同一个开源项目,区别在打包方和维护策略。常见的有Eclipse Temurin(原AdoptOpenJDK)、Amazon Corretto、Azul Zulu、以及各厂商自己的发行版。对学习用户来说,随便选一个LTS版本即可,我平时用得比较多的是Temurin的17。

下载时认准官网的LTS标签,别去不知名的小站点下,JDK是要在系统级别运行的东西,来源不可靠风险很大。Windows下会有两种安装包:.exe安装程序和.zip免安装包。.exe省事,会自动帮你配一部分环境变量;.zip更干净,解压即用,适合我这种喜欢自己掌控目录的人。

2.2 安装过程中的关键选择

用.exe安装时,会问你是否安装公共JRE。从JDK 11开始官方已经不单独提供JRE了,JDK本身就包含了运行环境,所以这一步直接跳过即可。安装路径改成前面规划好的D:\dev\jdk-17。

用.zip的话,解压后进目录看一眼,正常应该看到bin、conf、include、jmods、lib这几个文件夹。如果解压出来发现多套了一层同名目录,比如D:\dev\jdk-17\jdk-17\bin,那就要把内层提到外面来,或者配置环境变量时把路径写全。这个多套一层的现象在解压时非常常见,也是"环境变量配了没用"的高频原因之一。

2.3 JAVA_HOME、Path、CLASSPATH到底怎么配

Windows下配JDK环境变量,核心是三个:JAVA_HOME、Path、CLASSPATH。很多人照着教程配完能用,但不知道每个是干嘛的,我这里说清楚。

JAVA_HOME是一个自定义变量,值就是JDK的根目录D:\dev\jdk-17。它本身对java命令没直接影响,但Maven、Tomcat、IDEA以及大量构建脚本都会去读这个变量来定位JDK。所以哪怕你只配Path也能跑java,JAVA_HOME依然必须配。

Path决定了命令提示符能在哪些目录里找可执行文件。你需要新增一项%JAVA_HOME%\bin,这样在任意目录敲java、javac都能找到。

CLASSPATH是告诉JVM去哪里找.class文件和jar包。JDK 5以后这个变量其实可以不配,JVM有默认值。但很多老教程还在教你配一堆.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,如果你跟着配了,反而可能因为覆盖默认值引发奇怪问题。我的建议是直接不配,除非某个老工具明确要求。

具体操作步骤:

  1. 打开"此电脑"右键属性,进入"高级系统设置",点"环境变量"。
  2. 在"系统变量"里点新建,变量名JAVA_HOME,变量值D:\dev\jdk-17。
  3. 找到系统变量里的Path,点编辑,新增一行%JAVA_HOME%\bin,然后把它上移到靠前位置。
  4. 一路确定保存。

提示:Path的顺序是有意义的。Windows会按顺序查找,如果前面已经有别的目录里存在同名可执行文件,就会优先用那个。我遇到过一次系统里装了另一个软件的java.exe,结果java -version显示的版本和JAVA_HOME指向的完全对不上,把%JAVA_HOME%\bin上移后就正常了。

2.4 验证方式和失败排查思路

配置完成后一定要新开一个命令提示符窗口,已经开着的窗口读的还是旧的环境变量。然后执行:

java -version javac -version echo %JAVA_HOME%

正常应该看到版本号,比如java version "17.0.x",并且javac也能输出版本。如果java能用但javac提示找不到,说明%JAVA_HOME%\bin没进Path,或者Path里的路径写错了;如果两个都找不到,多半是JAVA_HOME值写错,或者目录多套了一层。

还有一种情况:java -version输出的版本和你期望的不一样。这时候用where java命令看看系统里到底有几个java.exe,通常会暴露多个版本共存的问题。理清哪个在后面、哪个在前,再调整Path顺序即可。

3. Maven安装与本地仓库、镜像加速

Maven是这套环境里最容易被"跳过原理直接抄配置"的一环。很多人settings.xml配了阿里云镜像,但不知道为什么要配;本地仓库路径改了,但不知道改了之后IDEA为什么还在往C盘下东西。这节把Maven的作用、安装、配置和与IDEA的绑定讲清楚。

3.1 Maven到底是干嘛的

一句话:Maven是一个项目构建和依赖管理工具。在它出现之前,项目要用的jar包得手动下载、手动放进lib目录,几个人协作时版本还经常对不上。Maven用一份pom.xml声明项目需要哪些依赖、什么版本,剩下的事它自动完成——去中央仓库下载、放进本地仓库、按依赖关系解析、编译、测试、打包。

它还能统一项目的构建流程。mvn clean package这条命令就能完成清理加打包,换台机器只要有Maven结果都一样。这也是为什么几乎所有Java项目模板都基于Maven或Gradle。

3.2 下载解压与MAVEN_HOME配置

从Apache官网下载apache-maven-3.9.x-bin.zip,注意选-bin结尾的二进制包,不是-src源码包。解压到D:\dev\apache-maven-3.9.6,检查目录里有bin、conf、lib三个主要文件夹。

环境变量配置和JDK类似:

  1. 新建系统变量MAVEN_HOME,值D:\dev\apache-maven-3.9.6。
  2. 在Path里新增%MAVEN_HOME%\bin。
  3. 新开命令行,执行mvn -v。

正常输出会包含Maven版本、JDK版本和系统信息。如果报"找不到JAVA_HOME"或者版本不对,说明JDK那边还没配好,回去检查JAVA_HOME。Maven启动时会去读它,读不到就起不来。

3.3 settings.xml的关键配置逐行讲

配置文件在conf\settings.xml。这个文件是全局配置,改它会影响所有项目;如果你只想给当前用户单独配,可以复制一份到C:\Users\你的用户名\.m2\settings.xml,个体配置优先级更高。我一般直接改全局这份,方便统一管理。

第一处:本地仓库路径。默认在C:\Users\用户名\.m2\repository,C盘紧张的话一定改掉。找到<localRepository>那行,默认是注释状态,取消注释并改成:

<localRepository>D:\dev\maven-repo</localRepository>

以后所有依赖都会下载到这里,项目多了之后这个目录轻松上几个G,放C盘很容易拖慢系统。

第二处:镜像加速。默认的中央仓库在国外,下载速度经常慢到让人怀疑人生。在<mirrors>标签里加一段阿里云镜像:

<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

<mirrorOf>*</mirrorOf>表示拦截所有仓库请求都走这个镜像,省得你一个个配。阿里云这个公共仓库聚合了中央仓库和各种常用第三方仓库,日常开发足够。

第三处:JDK编译版本。用JDK 17开发时,建议在<profiles>里显式声明编译版本,避免IDEA和命令行编译结果不一致:

<profile> <id>jdk-17</id> <activation> <activeByDefault>true</activeByDefault> <jdk>17</jdk> </activation> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> </profile>

配置改完后执行mvn help:effective-settings可以打印出最终生效的配置,用来确认改动有没有被正确读取。

3.4 和IDEA的绑定方式

Maven装好之后,IDEA默认会用它自带的Maven(Bundled),而不是你刚装的这个。我建议换成自己装的,原因是版本可控、settings.xml用的是你改过的那份、本地仓库路径也统一。

在IDEA里路径是File → Settings → Build, Execution, Deployment → Build Tools → Maven,需要改三处:Maven home path 指向你解压的目录,User settings file 勾选Override后指向conf\settings.xml,Local repository 会自动带出来,确认是D:\dev\maven-repo就对了。

注意:换完Maven后,老项目里下载过的依赖需要重新解析。右侧Maven面板点一下刷新按钮,或者右键pom.xml选Maven → Reload project,让它按新仓库重新拉一遍。

4. MySQL安装、初始化与连接配置

MySQL这一节我打算讲得细一点,因为8.0版本在安装和连接上和5.7差别不小,最大的坑是认证插件变化导致的连接失败。

4.1 安装包形式怎么选

Windows上有两个主流选择:MSI安装程序和ZIP压缩包。MSI是图形化向导,一路下一步,会自动帮你创建服务、设置root密码,适合第一次装的人。ZIP包是免安装,解压后手动初始化、手动注册服务,每一步都能看清楚,适合想把过程搞明白的人,也方便同时装多个版本。

学习和日常开发,我推荐先用MSI把流程跑通一遍,理解它到底做了什么,第二次再考虑ZIP。

4.2 MSI安装流程中的关键页面

下载时选mysql-installer-community这个完整安装器。启动后选择安装类型,选Custom自定义,只勾选MySQL Server和MySQL Workbench(图形客户端)就够了,其他示例库、文档之类的按需。

安装路径同样改到D:\dev\mysql-8.0.36。走到配置向导时,几个页面要留意:

  • Type and Networking:Config Type选Development Machine,端口默认3306。如果这台机器上已经有MySQL在用3306,这里必须改成别的,比如3307,否则服务起不来。
  • Authentication Method:会问用哪种认证方式。8.0默认是caching_sha2_password,更安全,但一些老版本的客户端和驱动连不上,会报Public Key Retrieval is not allowed。如果项目里用的驱动比较旧,可以选传统的mysql_native_password,兼容性好一些。选哪个都行,后面的连接串可以兜底。
  • Accounts and Roles:设置root密码。这里的密码一定记下来,很多人装完就忘,后面只能重装。建议用一个有规律的密码,别用纯随机串。
  • Windows Service:勾选把MySQL注册成系统服务,服务名默认MySQL80,勾选开机自启。

4.3 命令行验证与常用操作

安装完成后,新开命令行验证。因为mysql.exe在bin目录下,最省事的做法是把D:\dev\mysql-8.0.36\bin加到Path,或者新建MYSQL_HOME再引用。配好后:

mysql -u root -p

输入密码后应进入mysql>提示符。进去后先看几个基础信息:

SELECT VERSION(); SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'default_authentication_plugin';

如果character_set_server不是utf8mb4,中文存储可能出现乱码。虽然在建库时可以单独指定,但统一改成utf8mb4更省心。修改方式是编辑MySQL目录下的my.ini(MSI安装的话通常在C:\ProgramData\MySQL\MySQL Server 8.0\下),在[mysqld]段里加:

character-set-server=utf8mb4 collation-server=utf8mb4_general_ci default-time-zone='+08:00'

改完重启服务:net stop MySQL80然后net start MySQL80。这里顺便说一下时区,8.0默认时区可能不是你所在时区,会导致存进去的时间差几个小时,加上default-time-zone能省掉后面排查的功夫。

4.4 连接串里的几个必备参数

Java项目用JDBC连MySQL 8时,连接串里带上这几个参数会少踩很多坑:

jdbc:mysql://localhost:3306/你的库名?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true

useSSL=false避开自签名证书告警,serverTimezone解决时间偏差,allowPublicKeyRetrieval=true就是前面说的caching_sha2_password认证问题的解药。生产环境这些参数要按实际安全要求调整,但本地开发这样配最省事。

提示:如果你在IDEA里用数据库工具连MySQL,驱动版本也要注意。8.0的服务端配老版本驱动会报错,建议用和MySQL同代的驱动,比如mysql-connector-j-8.0.x。

5. Tomcat下载安装与IDEA集成

Tomcat是这五件套里"看起来最简单、实际上问题最集中"的一个。它的安装就是解压,难点在于版本对应关系和IDEA里的配置。

5.1 Tomcat版本和JDK的对应关系

Tomcat版本不是随便选的,它和Servlet规范、JDK版本都有绑定关系。记住这张表基本够用:

Tomcat版本Servlet规范包名建议JDK
8.5.xServlet 3.1javaxJDK 7+
9.0.xServlet 4.0javaxJDK 8+
10.0.xServlet 5.0jakartaJDK 8+
10.1.xServlet 6.0jakartaJDK 11+
11.xServlet 6.1jakartaJDK 17+

新手和大多数老教程对应的环境,选Tomcat 9最合适。如果你的项目是Spring Boot 3.x,那它默认用jakarta,对应Tomcat 10.1或以上。

5.2 下载解压与环境变量

下载页面上区分zip和tar.gz,Windows选zip。解压到D:\dev\apache-tomcat-9.0.85,目录里正常有bin、conf、lib、logs、temp、webapps、work这几个文件夹。

环境变量配一个CATALINA_HOME,值是Tomcat根目录。这个变量是给Tomcat自己的启动脚本用的,配Path不是必须的,但加上%CATALINA_HOME%\bin之后可以在任意目录用startup和shutdown命令,比较方便。

验证方式:双击bin\startup.bat,会弹出一个黑窗口,里面滚动输出启动日志,最终出现Server startup in xxx ms字样。然后打开浏览器访问http://localhost:8080,能看到Tomcat的默认欢迎页就说明成功了。

5.3 server.xml里值得调的几处

conf\server.xml是Tomcat的核心配置。默认情况下最需要关注的是端口和编码。

端口冲突是最常见的启动失败原因,8080被别的软件占了之后,Tomcat日志里会明确写Address already in use。解决办法有两个:改Tomcat端口,或者关掉占用的程序。改端口就是编辑server.xml里这行:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

顺便加上URIEncoding="UTF-8",能让URL里的中文参数不乱码。虽然8.0以后Tomcat默认就是UTF-8,但显式写上不亏。

另外如果startup.bat一闪而过,八成是JAVA_HOME或JRE_HOME没配好。想看清报错,不要双击,用命令行进到bin目录执行catalina.bat run,异常信息就会完整打印出来。

注意:Tomcat目录里的work文件夹是JSP编译后的缓存。改了JSP但页面没变化时,先清空这个目录再重启,比反复重启有效得多。

5.4 IDEA里配置Tomcat的完整步骤

先说一个很多人不知道的前提:IDEA旗舰版(Ultimate)才内置Java EE和Tomcat支持,社区版(Community)里根本没有Tomcat这个选项。如果你装的是社区版,在Run/Debug Configurations里是找不到Tomcat Server的。

社区版用户有两个替代方案:一是装Smart Tomcat插件,它能让你在社区版里启动外置Tomcat并部署web项目,配置方式和旗舰版类似;二是用Maven插件,比如在pom里加tomcat7-maven-plugin或cargo-maven3-plugin,用mvn tomcat7:run启动。插件方案不用装额外东西,但配置稍微绕一点。

旗舰版的配置步骤:

  1. Run → Edit Configurations,点左上角加号,选Tomcat Server → Local。
  2. 在Server标签页点Configure,指向Tomcat解压目录。IDEA会自动识别版本。
  3. 设置HTTP port(默认8080)和JMX port(默认1099),有冲突就改。
  4. 切到Deployment标签页,点加号选Artifact,把项目的war包或war exploded加进去。推荐用war exploded,改了JSP或静态资源不用重新打包,刷新就能看到效果。
  5. 设置Application context,也就是访问路径。默认是/<项目名>_war_exploded,嫌长可以改成/<项目名>或者直接/。

配置完点绿色虫子(Debug)或三角形(Run)启动,IDEA下方会输出Tomcat日志,成功后会给出访问地址。这里有个小细节:IDEA启动Tomcat时用的是它自己生成的临时CATALINA_BASE,不是你解压目录下的那份,所以你在原目录改的server.xml不一定生效。端口、编码这类配置要在IDEA的Run Configuration里改,或者勾选使用自定义的Catalina base。

6. IDEA安装与三大件绑定核对

IDEA是这整套环境的中枢。它装好之后,真正要做的事是把JDK、Maven、Tomcat三处路径绑对,否则前面装的全白费。

6.1 版本选择和授权路径

IDEA分社区版和旗舰版。社区版免费开源,支持Java基础开发、Maven、Gradle,但不支持Spring/Spring Boot的深度支持、不支持Java EE和Tomcat、不支持数据库工具和部分Web框架。旗舰版功能完整,但需要商业授权。

正规获取授权的途径有几个:学生和教师可以申请免费教育授权,开源项目维护者可以申请开源授权,企业用户购买商业授权。这些渠道都是官方公开的。我个人建议刚开始学Java基础时用社区版完全够,等到要做Spring Boot Web项目、需要Tomcat和数据库工具时,再根据自己的身份去申请对应授权或者用社区版搭配插件方案。不要去找来路不明的安装包,风险很大。

6.2 首次启动必须改的设置

第一次启动IDEA会问主题、插件,这里先跳过,进去之后有几处建议立刻改掉。

文件编码统一为UTF-8。路径是File → Settings → Editor → File Encodings,把 Global Encoding、Project Encoding、Default encoding for properties files 三个都改成UTF-8,properties那个勾上Transparent native-to-ascii conversion。中文乱码十有八九是这里没统一。

自动导包和代码提示。Editor → General → Auto Import里勾上自动导入和自动删无用导入,能省很多手动操作。

内存调大。默认的堆内存对稍大的项目不够用,编辑Help → Change Memory Settings,把最大值调到 2048MB 或以上,具体看你机器内存。调完重启生效。

VM options加编码参数。在Help → Edit Custom VM Options里加一行-Dfile.encoding=UTF-8,解决控制台输出中文乱码的问题。

6.3 JDK、Maven、Tomcat三处绑定核对清单

这三处的绑定分散在不同菜单里,很容易漏。我整理成一张核对表,装完照着过一遍:

配置项路径要确认的内容
Project SDKFile → Project Structure → Project指向JDK 17根目录,Language level一致
Platform SDKFile → Project Structure → SDKs是否已有该JDK条目,没有就新增
Maven homeSettings → Build Tools → Maven指向自装Maven,不是Bundled
User settings同上勾Override,指向改过的settings.xml
Local repository同上显示为自定义的maven-repo路径
Tomcat ServerRun → Edit Configurations仅在旗舰版或装了插件后可见

还有一个容易被忽略的地方:Modules里的语言级别。有时候Project设了17,但某个Module还是8,编译时就会报不支持的语言特性。进Project Structure → Modules逐个检查,保持一致。

6.4 插件推荐和项目模板

社区版用户建议装Smart Tomcat(部署外部Tomcat)、Lombok(简化Java代码)、Maven Helper(分析依赖冲突)。旗舰版用户额外可以享受内置的数据库工具和Spring支持,不用装额外插件。

新建项目时,学Servlet/JSP选Java Enterprise(旗舰版)或Maven加手动配置webapp目录;做Spring Boot选Spring Initializr,把JDK和Maven版本选好,把Spring Web依赖勾上,生成的骨架直接能跑。

提示:新建Maven项目后IDEA有时会提示"没有找到web.xml",这是正常的,Maven的web项目默认不带web.xml。在Project Structure → Facets里给Web模块指定web资源目录,或者干脆用注解方式配置Servlet,就绕过去了。

7. 全链路跑通验证与踩坑复盘

前面六节都是分模块搭,这一节把它们串起来,用一个最小项目验证整条链路是否通畅。能跑通这一步,才算真正把环境搭好了。

7.1 一个最小Web项目的完整验证流程

验证目标:写一个Servlet,连上MySQL取一条数据,部署到Tomcat,通过浏览器访问。

第一步,在IDEA里新建Maven项目,pom里加上Servlet API和MySQL驱动:

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency>

注意Servlet API的scope必须是provided,因为Tomcat本身会提供这个包,打进去反而可能冲突。

第二步,项目结构里把src/main/webapp设为web资源目录,没有就手动建。第三步,写一个继承HttpServlet的类,doGet里用JDBC连MySQL查数据,把结果通过response.getWriter().println()输出。第四步,用前面配好的Tomcat Run Configuration部署,启动访问。

这个流程能跑通,说明JDK能编译、Maven能下依赖、Tomcat能部署、MySQL能连接,五件套全部到位。任何一步报错,都能对应回前面某一节去查。

7.2 常见问题速查表

下面这张表是我带人过程中统计出来的高频问题,基本覆盖80%的翻车场景:

现象大概率原因处理方式
命令行提示"不是内部或外部命令"Path没配或没生效检查Path,重开命令行窗口
java和javac版本不一致系统里有多个JDKwhere java排查,调Path顺序
Maven下载依赖极慢或失败没配镜像或镜像失效检查settings.xml里的mirror配置
mvn报找不到JAVA_HOMEJAVA_HOME未配或值错误核对JAVA_HOME指向JDK根目录
服务端连MySQL报Public Key Retrieval认证插件为caching_sha2_password连接串加allowPublicKeyRetrieval=true
存进去的时间不对MySQL时区设置问题my.ini加default-time-zone并重启
Tomcat启动窗口一闪而过JAVA_HOME未配命令行执行catalina.bat run看报错
Tomcat报Address already in use8080端口被占用改端口或关掉占用进程
IDEA里找不到Tomcat Server选项用的是社区版装Smart Tomcat插件或换方案
页面中文乱码编码未统一IDEA编码设UTF-8,server.xml加URIEncoding
IDEA控制台中文乱码JVM文件编码不是UTF-8VM options加-Dfile.encoding=UTF-8
Maven项目依赖飘红仓库未刷新或依赖坐标错误Reload project,检查pom坐标

7.3 几个容易被忽略的细节

第一个细节是环境变量的生效范围。用户变量只对当前登录用户生效,系统变量对所有用户生效。如果你换了Windows账户,配在用户变量里的东西就没了。我一般统一配系统变量。

第二个细节是多个JDK共存的管理。真实项目里经常要同时维护JDK 8和17的工程。我的做法是两个版本都装好,各自一个JAVA_HOME_8、JAVA_HOME_17变量,Path里只放当前主用的那个,切换项目时在IDEA的Project Structure里单独指定SDK,不动系统环境变量。这样既不影响命令行,项目之间也互不干扰。

第三个细节是Maven依赖冲突。装全了环境不代表工程就一定跑得起来,jar包版本冲突是另一类常见问题。装个Maven Helper插件,打开pom文件切到Dependency Analyzer标签,冲突的依赖会红色标记出来,配合<exclusions>排除掉多余版本,比在异常堆栈里大海捞针高效得多。

第四个细节是养成备份环境配置的习惯。把settings.xml、server.xml、my.ini这几个改过的配置文件单独存一份,下次换电脑或者重装系统,直接覆盖回去,能省掉重复劳动。

最后分享一个我自己的操作习惯:整套环境搭完之后,立刻新建一个空项目跑通"编译—打包—部署—访问"这条最简链路,趁热把问题暴露出来。因为环境搭建的问题往往有延迟——装的时候没报错,等到真正写项目时才冒出来,那时候你已经在想业务逻辑了,切换成本很高。一次性验证到位,后面几个月都能安心写代码。这套环境我前后在十来台机器上装过,从Windows到macOS,踩的坑基本都在上面这几节里了,真正难的不是某个命令记不住,而是出问题时知道往哪个方向查。

返回列表