简介:面向使用 IntelliJ IDEA 从事 Java 开发的学习者与工程人员,这份文档针对 2020.1.4 和 2022.2 两个版本梳理常用配置,着力解决插件挑选、编码字体、自动导包编译、热部署、快捷键和配置迁移等效率问题。压缩包内只有 1 个 docx 文件,大小约 1.02MB,内容集中,条目按配置主题组织,适合按需查阅并长期留存。正文列明主题皮肤、Git 工具、Maven 依赖树、代码规范、日志格式化、括号高亮、接口定位及 XML 与 DAO 跳转等插件的用途,也覆盖文件编码、空格显示、换行符、隐藏配置文件、显示内存、自定义缩写、列模式编辑、导入导出设置及常见警告处理等实操条目,能帮助读者减少重复配置、统一开发环境。已有 480 人学习,适合希望补齐 IDEA 使用细节、提升日常开发效率的读者参考。
1. 版本选型这件事,比想象中更容易出问题
上个月帮一个小组统一开发环境,六个人装了六个不同版本的 IDEA,结果同一份代码提交上去,git diff 里一半是空白改动——有人用 CRLF、有人 Tab 缩进、有人默认 GBK。问题不在代码,全在 IDEA 装完之后没人认真配置。IDEA 常用配置这件事听着琐碎,却是每个人换机器、进新项目都要重来一遍的固定动作。这里记录的是 IntelliJ IDEA 2020.1.4 和 2022.2 两个版本都实际验证过的一整套配置:装哪个包、装哪十二个插件、十七项设置怎么改、坏了怎么救。写这两版是因为它们代表了两代菜单结构,2020.1.4 的路径在 2022.2 上不少已经挪了位置,照旧教程点会找不到入口。刚上手 Java 的、从 Eclipse 迁过来的、要给团队做统一环境模板的,都可以照着走。
2. 安装与插件装配:先装对包,再按四组装插件
安装本身没有任何技术含量,需要注意的地方都在选择上。真正让环境变得好用,是从插件开始的,但这也是最容易出问题的一步:一次装十几个插件,启动变慢、菜单冲突、某个插件版本不兼容导致整个 IDE 卡死,排查起来都不知道从哪个开始。我的做法是分组装、分组验证,每装完一组就重启一次,确认能正常启动再装下一组。
2.1 Community 还是 Ultimate,以及安装时的两个选项
官方下载页提供两个版本。Community 版免费,够用来写 Java SE、看源码、跑 Maven 工程;Ultimate 版额外带 Web 前端、数据库工具、Spring 相关支持。区别不在“能不能用 IDEA”,而在于你的项目有没有用到企业级框架的深度集成。
判断标准很简单:工程里如果有 Spring Boot、MyBatis、前端框架这类东西,而且你希望有专门的配置文件跳转、Bean 依赖图、SQL 语句补全,那就上 Ultimate;如果只是刷题、写工具类、看开源项目源码,Community 完全够用,而且启动更快、占内存更少。
安装向导里有两个选项值得留意。一是“Create Desktop Shortcut”,按 64 位系统勾选即可;二是关联文件类型,.java、.xml、.properties建议都关联上,以后双击直接进 IDEA,省得每次先开 IDE 再找文件。
安装路径上有一个容易被忽略的问题:别装在带中文或空格的目录下。这不是 IDEA 独有的毛病,但脚本执行、插件解压、某些命令行工具调用都会在这里出问题,等到报错时找原因很费时间。路径里保持纯英文,装在非系统盘也行,重装系统时不会连配置一起丢。
装完之后第一次启动,会问要不要导入旧配置。如果是换机器,先选“不导入”,把新环境配干净,最后再从旧机器的导出包做一次合并,这样能避免旧版本里那些已经废弃的选项跟着过来。
2.2 十二个插件按四组装,别一次装完
插件市场里搜名字直接装,装完重启。整套装下来大概十分钟,但顺序有讲究。十二个插件按用途分成四组:
| 分组 | 插件名 | 作用 |
|---|---|---|
| 外观 | vuesion theme | 界面皮肤,换掉默认灰白配色 |
| 外观 | CodeGlance | 编辑器右侧显示代码缩略图,长文件快速定位 |
| 外观 | Rainbow Brackets | 彩虹括号,嵌套层级一眼分清 |
| 版本控制 | GitToolbox | 增强 Git 工具,分支、提交信息直接显示在行尾 |
| 构建 | Maven Helper | 依赖树可视化,冲突的 jar 用红色标出 |
| 构建 | Search in Repository | 直接按类名查 Maven 坐标,不用开浏览器 |
| 日志 | Grep Console | 控制台按日志级别上色,ERROR 一眼看到 |
| 日志 | MyBatis 日志格式化 | 把 MyBatis 打印的带问号 SQL 拼成完整可执行语句 |
| 编码 | Lombok | 让 getter/setter、构造器这些注解在 IDE 里真正生效 |
| 编码 | Alibaba Java Coding Guidelines | 阿里巴巴代码规范检查,实时提示不合规写法 |
| Web | RestfulToolkit | 按 URL 反查 Controller 类,Ctrl+Alt+N 唤出 |
| Web | MyBatis XML/DAO 互跳 | XML 里的语句和 DAO 接口之间一键跳转 |
第一组装外观三个。这三个的风险最低,装完重启,确认主题生效、右侧出现缩略条、括号变色,就说明插件加载链路没问题。
第二组装构建和版本控制三个。Maven Helper 装完后,打开任意pom.xml,编辑器底部会多一个 “Dependency Analyzer” 标签,点进去能看到依赖树。这里有个前提:工程必须已经被 IDEA 识别成 Maven 工程,如果是导入的普通目录,先右键pom.xml选 “Add as Maven Project”,否则标签不出现。Search in Repository 需要联网查询中央仓库和已配置的镜像,如果公司内网访问受限,这个插件会一直转圈,那就别装。
第三组装日志和编码四个。Lombok 需要额外打开注解处理,否则装完照样一片红:
Settings → Build, Execution, Deployment → Compiler → Annotation Processors 勾选 Enable annotation processing这一步漏掉的人特别多,现象是插件明明装了,@Data标在类上还是提示找不到 getter。Alibaba 规范插件装完不会自动扫描全项目,需要手动触发:右键项目 → “编码规约扫描”,结果按 Blocker/Critical/Major 分级列出,第一次扫出来几百条很正常,先看 Blocker 那几条。
第四组装 Web 两个。RestfulToolkit 的目的是省掉“从 URL 找接口”的时间,唤出后输入/api/user/list这样的路径,直接列出匹配的 Controller 方法。MyBatis 互跳插件在 XML 的<select id="xxx">上按住 Ctrl 点击能跳到 DAO 方法,反过来也行,没有它只能靠全局搜索方法名。
2.3 插件装不上或者装完起不来,怎么办
插件市场打不开、下载卡在 0%、装完重启直接白屏,这三种情况我都遇到过。
下载卡住一般是网络到插件仓库的连接问题。常见做法是先关掉 IDEA,去插件市场网页版下载对应版本的.jar或.zip,然后Settings → Plugins → 齿轮图标 → Install Plugin from Disk手动选包。注意插件页面上有 “Compatibility” 一栏,会写支持哪些 IDEA 版本区间,2020.1.4 和 2022.2 差了两个大版本,很多插件是分开发布的,下错版本装上去不报错但功能不出现。
装完起不来,也就是白屏或卡在启动画面,处理办法是进安全模式。命令行执行:
# 禁用所有第三方插件启动,用来定位是不是插件导致的问题 idea.exe --safe-mode # macOS / Linux idea --safe-mode能起来就说明是某个插件的问题,回到Settings → Plugins按安装时间倒序一个个禁用,重启验证。这个流程比较笨,但比反复重装 IDE 快得多。
还有一种情况是插件之间打架。比如同时装了多个主题插件,编辑器颜色会互相覆盖,表现为部分区域文字和背景同色,看着像代码丢了。这类问题不会报错,只能靠“装一组验一组”的方式提前发现,所以前面才强调分组装配。
3. 基础设置落地:编码、缩进、换行符一次配到位
十七项设置里,真正影响团队协作的其实只有前四项:编码、缩进、换行符、自动导包。剩下的多是个人偏好,配不配都能干活。这一章把有硬性对错的部分挑出来讲清楚,把纯偏好的部分快速过一遍。
3.1 File Encodings 三处必须对齐
路径是Settings → Editor → File Encodings,2020.1.4 和 2022.2 位置一致,这一项没变过。页面里有三个下拉框:
- Global Encoding:全局默认编码
- Project Encoding:当前工程编码
- Default encoding for properties files:
.properties文件专用编码 - 下方还有一个 “Transparent native-to-ascii conversion” 复选框
三处全部选 UTF-8。第三项要单独说,.properties文件在老项目里经常是 ISO-8859-1,如果不改,中文配置项在 IDE 里显示成\uXXXX转义。勾上 “Transparent native-to-ascii conversion” 之后,IDE 会在保存时自动转义,你看到的是中文,文件里存的是转义序列,两边都不出错。
改完这一项,已有的文件不会自动转换。如果工程里混着 GBK 的文件,打开还是乱码,需要单独处理:右下角状态栏点编码名 → “Reload in another encoding” 试 GBK,能正常显示就说明源文件是 GBK,再选 “Convert” 转成 UTF-8 并保存。
比 IDE 设置更可靠的做法是在项目根目录放一个.editorconfig,让编码、缩进、换行符跟着仓库走,谁 clone 下来都一样:
root = true [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space indent_size = 4 trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false [*.{yml,yaml}] indent_size = 2root = true表示到这里为止不再向上查找父目录的配置。end_of_line = lf统一换行符,解决前面说的 diff 满屏空白问题。indent_size = 4配indent_style = space就是四空格缩进。trim_trailing_whitespace去掉行尾多余空格,这项在多人协作里能消掉大量无意义的 diff。Markdown 文件关掉行尾空格清理,因为两个空格在 Markdown 里是换行语义。
IDEA 原生支持这个文件,不需要装插件,改完即时生效。这是我认为性价比最高的一项配置,比在每个人的 IDE 里点十七次设置靠谱得多。
3.2 缩进、空格显示与换行符
Settings → Editor → Code Style → Java里,Tab size 和 Indent 都设 4,Use tab character 不勾选。然后在Settings → Editor → General → Appearance里勾上 “Show whitespaces”,代码里的空格会显示成小灰点、Tab 显示成箭头。刚开的时候会觉得满屏麻点,看两天就习惯了,好处是缩进错乱、行尾多余空格这类问题肉眼可见。
换行符在右下角状态栏能看到,显示CRLF就说明是 Windows 格式。改成 LF 的方式是点那个位置 → 选LF→ 弹出 “Convert” 确认。新项目建议在Settings → Editor → Code Style的 Line separator 里直接设成Unix and macOS (\n),新建文件默认就是 LF。
这里有个容易误解的地方:换行符设置只管新建文件,已有文件要单独转换。批量转的话,选中项目根目录 →File → File Properties → Line Separators→ 选LF,一次处理整个工程。
3.3 代码提示大小写与自动导包
Settings → Editor → General → Code Completion,把 “Match case” 取消勾选。默认是勾上的,意思是输入str不会提示StringUtils,取消之后大小写不敏感,少打很多字。
同一页面往下,Auto Import区域有两项:
- Add unambiguous imports on the fly:只有一个候选包时自动导入
- Optimize imports on the fly:自动清理没用到的 import
两项都勾上。原文提到的“复制时自动导包”就是这两个开关在起作用,粘一段代码进来,需要的包自动补上,不需要的手动删。注意第一项只处理“只有一个候选”的情况,如果Date这种同时存在于java.util和java.sql的类,还是会弹窗让你选,这是设计如此,别指望它替你决定。
3.4 界面减负:行号、虚线、自动更新、内存指示
剩下这几项纯属个人习惯,但都是装完就想改的。
显示行号在Settings → Editor → General → Appearance → Show line numbers。2020.1.4 需要手动勾,2022.2 新装默认就是开的。
右侧那条竖直虚线是排版参考线,Settings → Editor → General → Appearance里把 “Show hard wrap and visual guides” 相关选项取消勾选。2020.1.4 上这个选项叫 “Show hard wrap guide”,2022.2 合并成了带子菜单的一项,找不到就用设置页左上角的搜索框直接搜 “visual guides”。
关掉自动更新:Settings → Appearance & Behavior → System Settings → Updates,取消 “Automatically check for updates”。公司电脑权限受限时,自动更新下载完装不上,每次启动弹窗,很烦。
显示内存大小:双击 Shift 打开全局搜索,输入show memory,找到 “Show memory indicator” 开关设为 ON,右下角状态栏就会显示xxxM of 2048M。这个数字在跑大项目时很有用,看到占用逼近上限就该调Help → Edit Custom VM Options里的-Xmx了,别等到频繁 Full GC 卡顿才想起来。
4. 快捷键与编辑效率:把 Eclipse 的手感搬过来
从 Eclipse 迁到 IDEA 的人,前两周最痛苦的不是功能少,是手不听话。Ctrl 点击、Alt+方向键、列编辑,这些肌肉记忆全都要重建。IDEA 提供了足够多的定制入口,能把它调教到接近原来的手感,但有几处需要绕一下。
4.1 用 Quick Lists 还原 Eclipse 的 Ctrl 多跳转
Eclipse 里在类名、方法名上按住 Ctrl,会弹出一个小菜单:跳接口、跳实现类、跳返回值类型,让你选。IDEA 默认是 Ctrl+左键直接跳到声明,没有选择这一步。想还原这个行为,靠的是 Quick Lists。
配置分三步。第一步,Settings → Keymap → Quick Lists,点+新建一个列表,起名比如CtrlJump。然后在弹出的树里展开 Main Menu → Navigate,把这几项加进去:
- Declaration(声明)
- Implementation(s)(实现)
- Super Method(父方法)
- Type Declaration(类型声明)
第二步,给这个列表绑快捷键。回到 Keymap 主界面,搜索你刚建的列表名CtrlJump,右键 → “Add Keyboard Shortcut”,按下Ctrl+左键对应的组合。注意 IDEA 里鼠标快捷键是单独一类,右键菜单里有 “Add Mouse Shortcut”,可以设成Alt+Button1或者Ctrl+Button1,看你想覆盖哪个。
第三步,处理冲突。Ctrl+左键默认已经被 “Go to Declaration” 占用,加了新绑定之后会提示冲突,选择保留两者即可,实际触发时先弹列表,选完再执行。
这套配置的意义在于把“我到底想看声明还是看实现”这个决定权还给你。看框架源码时,接口方法点进去只能看到空壳,必须再点一次找实现类,多这一步很打断思路。配好之后一次点击拿到列表,选实现直接到位。
4.2 列模式:标准列和不规则列两种用法
批量改一批配置项、给一组字段统一加修饰符,这种活不用列模式就得一行行改。IDEA 给了两种模式。
标准列模式:按住Alt不放,鼠标左键从起点往下拖,会拉出一个矩形选区,输入的内容会同时写进每一行。适合给连续多行加同样的前缀。
不规则列模式:Shift+Alt+左键在多个位置逐一点击,每点一次加一个光标,位置可以任意。适合给不连续的几行同时改同一个变量名。
两种模式的区别在于选区形状:矩形 vs 离散光标。前者一次拖到位,后者可以精确控制落在哪几行。
一个实际场景:一个类里有十个private String字段,要全部加@ApiModelProperty注解。用标准列模式在每行行首拉出矩形光标,一次性输入注解前缀,十行同时改完,比正则替换稳妥,不会误伤其他行。
4.3 自定义缩写:把 syso 搬过来
sout是 IDEA 的默认输出模板,System.out.println()敲四个字母加 Tab 就出来。Eclipse 用户习惯的是syso,切过来之后手指总会自觉地打syso,然后发现没反应。
改法:Settings → Editor → Live Templates,展开Java分组,能看到sout这一条。选中它,点右上角的 “Duplicate” 复制一份,把 Abbreviation 改成syso,Template text 保持System.out.println($END$);不变。$END$是光标最终停留的位置,不要删掉,否则输出完光标会跑到行首。
更省事的做法是直接编辑模板配置文件。Live Template 存在 IDEA 配置目录下的templates文件夹里,导出格式长这样:
<templateSet group="user"> <template name="syso" value="System.out.println($END$);" description="Eclipse 风格的控制台输出" toReformat="true" toShortenFQNames="true"> <context> <option name="JAVA_STATEMENT" value="true" /> </context> </template> </templateSet>name是缩写词,也就是敲什么触发。value是展开内容,$END$标记光标落点,还可以用$VAR$定义变量,展开时按 Tab 逐个跳转填写。toReformat="true"表示插入后自动按代码风格排版,避免缩进错位。context限定生效范围,JAVA_STATEMENT表示只在 Java 语句位置触发,写在注释里不会误触。
这份文件可以直接导入:File → Import Settings选包含 templates 的 zip 包,团队里一个人配好,其他人导入就统一了。这也是配置迁移的核心思路,后面单独讲。
5. 避坑与常见问题排查:五条实际遇到过的记录
配置项改完之后没生效,比不知道怎么配更浪费时间,因为你以为已经配好了。下面这五条是反复出现的,按“现象 → 原因 → 解决”记录。
5.1 热部署配了但改代码没反应
现象:按教程打开了自动编译,Registry 里的开关也设了,改完 Java 文件保存,浏览器刷新还是旧结果,必须手动重启。
原因有两个层次。第一层,compiler.automake.allow.when.app.running这个 Registry 开关在 2020.1.4 上存在,到 2022.2 已经被移除,新版把“运行时自动编译”合并进了Settings → Build, Execution, Deployment → Compiler → Build project automatically,再去找 Registry 里的键会发现根本没有。第二层,光有自动编译还不够,JVM 层面需要有类加载机制配合,也就是 Spring Boot 的 devtools。
解决分两步。先确认自动编译开着,Ctrl+Shift+Alt+/打开 Registry(2020.1.4 用这个入口),找compiler.automake.allow.when.app.running并勾上;2022.2 上跳过这步,直接看 Compiler 页面。然后加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>scope设为runtime表示只在运行期生效,不进编译期 classpath。optional设为true是关键,它阻止这个依赖传递给下游模块,否则打成生产包时会带着 devtools,启动日志里一堆重启提示。
改完依赖要重新导入 Maven,然后 IDEA 里按Ctrl+F9手动触发一次 Build,之后改代码保存,看控制台有没有 “Restarting due to class change” 之类的日志。没有这条日志,说明 devtools 没生效,回去检查依赖是不是加在了正确的模块里。
5.2 满屏 Private field is never assigned
现象:@Autowired注入的字段,每个都标黄,提示 “Private field 'xxx' is never assigned”,整个类飘满警告。
原因:这条检查属于 Unused declaration 系列,静态分析看不到 Spring 容器在运行时的注入行为,所以认定这个字段永远没人赋值。不是代码问题,是检查规则不了解框架。
解决:Settings → Editor → Inspections,搜索Unused declaration,在右侧的 Options 里找到与注解相关的忽略项,把org.springframework.beans.factory.annotation.Autowired加进去。加完之后该类警告消失,但真正没用到的私有字段仍然会提示,检查本身没被削弱。
顺带一提,同一页面还有 “Entry points” 的概念,标记为入口的方法不会被判定为未使用。项目里如果有反射调用的方法,也在这里加。
5.3 .iml 和 .idea 又冒出来了
现象:明明在项目视图里隐藏了.idea和*.iml,过两天又出现了,提交时不小心带上去,同事拉下来一片冲突。
原因:Settings → Editor → File Types → Ignored Files and Folders里的隐藏只是“看不见”,文件还在磁盘上,Git 照样跟踪。真正要解决问题得从版本控制层面处理。
解决:在项目根目录的.gitignore里加规则:
# IDEA 工程文件,不入库 .idea/ *.iml *.iws out/ target/已经提交过的要清一次缓存,否则规则不生效:
# 把已跟踪的 .idea 从索引里移除,本地文件保留 git rm -r --cached .idea git rm --cached "*.iml" git commit -m "chore: 移除工程文件跟踪"--cached表示只动索引不动工作区,本地配置不会丢。执行完再提交,之后.idea就只在本地存在,不影响协作者。
5.4 配置导出后跨版本导入,字体全乱
现象:2020.1.4 导出settings.zip,导入到 2022.2,字体变成默认值,主题也没了,部分设置项显示为灰色不可改。
原因:两个大版本之间菜单结构、配置项命名都有变化,旧版导出的包里某些键在新版不存在,导入时会被静默丢弃,丢弃之后对应项就回落成默认值。字体、主题这类和 UI 框架绑定的配置最容易出问题。
解决:跨大版本迁移只导“稳定”的部分。File → Export Settings时可以勾选导出范围,把 UI 相关的取消掉,只留 Keymap、Live Templates、Inspections、Code Style、File Encodings 这几类。插件配置单独处理,不要跟着配置包走,因为插件本身要重新按版本装。
导入之后一定要做一遍核对:打开 File Encodings 看三个下拉框、打开 Code Style 看缩进、打开 Keymap 看自定义快捷键在不在。这几项是静默丢失的高发区。
5.5 改了文件,文件夹不变色
现象:改了某个文件,项目树里对应文件夹应该变色提示有未提交改动,但新加的文件变色,改过的旧文件反而不变。
原因:这个高亮依赖版本控制状态,只对已经被 Git 跟踪的文件生效。新建但没git add的文件属于 untracked,状态不同,走的另一套显示逻辑。另外 2020.1.4 和 2022.2 对这个选项的位置也不一样。
解决:先确认Settings → Version Control → Confirmation里的 “Highlight directories that contain modified files in the Project tree” 是勾上的,2022.2 里可能藏在子菜单,直接搜索 “highlight” 关键词更快。再确认文件确实在 Git 跟踪范围内,用git status看是不是显示为 “Untracked files”。如果文件被.gitignore排除,那永远不会变色,这是预期行为不是 bug。
6. 装完怎么验证:七项一次过完再开工
配置改完不等于生效,这一点我踩过太多次。改完当场看着好好的,第二天启动发现编码回退了、插件被禁用了、内存指示器不见了。所以每次装完环境,我都会走一遍固定的验证流程,七项,两分钟。
| 验证项 | 操作 | 期望结果 |
|---|---|---|
| 编码 | 新建一个.java文件,看右下角 | 显示 UTF-8 |
| 换行符 | 同上,看右下角行尾标记 | 显示 LF,不是 CRLF |
| 缩进 | 输入一个 Tab 或四个空格,开 Show whitespaces | 显示四个灰点,无箭头 |
| 代码提示 | 输入str观察补全列表 | 出现String、StringUtils等大写开头候选 |
| 插件 | 按Ctrl+Alt+N输入/api/user/list | 命中对应 Controller 方法 |
| 热部署 | 改一个接口的返回字符串,保存 | 控制台出现重启日志,刷新即生效 |
| 内存 | 看右下角状态栏 | 显示xxxM of 2048M字样 |
前四项是纯本地设置,最容易被“以为改过了”骗过去。尤其是换行符,.editorconfig只影响新文件,老文件必须手动 Convert,验证时一定要打开一个已有文件看,而不是新建一个。
后三项验证的是插件和运行时。Ctrl+Alt+N没反应,通常是 RestfulToolkit 没装成功或者被安全模式禁用,去 Plugins 里看有没有红色提示。热部署没日志,回去查 devtools 依赖加在哪个模块、optional有没有设、自动编译开没开。
最后补一个动作:File → Export Settings,把这次的配置导出成 zip,命名带上版本号,比如idea-config-2022.2.zip。这个包就是你下次换机器时的参照物,比事后回忆“当时好像改过编码”可靠得多。
从那以后我每次换机器,都强制走一遍这张表,不跳项、不凭感觉。有次赶时间跳过了换行符那一步,结果三天后合并分支时多出两百多行纯空白 diff,返工半小时。配置这件事没有捷径,走一遍就是走一遍。希望帮到你。
本文还有配套的精品资源,点击获取