简介:面向 IntelliJ IDEA 使用者的常用配置整理文档,兼顾 2020.1.4 与 2022.2 两个版本,适合希望统一开发环境、减少重复设置并提升编码效率的 Java 开发者、初学者及团队参考。文档围绕插件选型与用途对照、文件编码与字体调整、自动导包与代码提示、自动编译与换行符统一、内存占用显示、热部署前提配置、自定义代码缩写、快捷键与列模式编辑、界面细节优化、配置导入导出以及常见告警处理等内容展开,并针对未使用字段误报等问题给出排查思路,便于读者按项目需要逐项取舍。压缩包内含 1 个 docx 文件,大小约 1.02MB,篇幅集中、便于检索,可作为配置清单在环境搭建和旧机迁移时对照使用。已有 480 人学习,适合需要系统梳理 IDEA 基础设置、补齐插件与效率配置的读者参考。
1. 换台机器先别急着拉代码:一套配置撑住 2020.1.4 和 2022.2
新机器装完 IntelliJ IDEA,默认那套配置能用,但离顺手差着老远——文件编码跟着系统走、缩进是带真 Tab 的 4 格、换行符 CRLF、控制台日志一片同色、改一行代码就得重启。这份配置清单覆盖 2020.1.4 和 2022.2 两个跨度不小的版本,从插件选型、编码格式基线、热部署链路,一路排到快捷键迁移和踩过的坑。适合刚换 IDE 的 Java 后端、要给团队出统一配置基线的人,以及手上还挂着老项目、不敢贸然升级的人。下面按“先定插件、再定格式、再打通编译链路、最后迁快捷键”的顺序走,两个版本的差异我会在对应位置标出来。
2. 插件选型:九个插件按痛点分三组,先装哪几个
2.1 为什么先装插件,再动设置项
插件会往 Settings 里挂自己的节点,也会改一些默认值。装了主题类插件,Editor -> Color Scheme 底下多一层;装了依赖分析插件,右键菜单多一栏。先装插件再调设置,路径是稳定的;反过来先调一遍设置再装插件,有些节点位置会挪,2022.2 尤其明显——新版把 Settings 搜索做得更细,但归类改过,照着 2020.1.4 的截图找会翻车。
第二个理由是版本基线。两个版本之间隔了十几个大版本,插件市场是按 build 号筛兼容性的(2020.1.x 对应 201.xxx,2022.2 对应 222.xxx),同一个插件可能对应两条不同的分发分支,功能有出入,甚至有的插件在 2022.2 上已经停止维护,只能退而求其次用内置功能替代。
选型原则只有一条:只装能立刻减少一次鼠标点击或一次上下文切换的插件。界面美化、代码缩略图这类“看着爽”的排后面,先上有明确产出的——依赖树、完整 SQL、URL 反查这些。热部署和快捷键迁移这类跟工具链深度绑定的,等插件定下来再动,不然调完发现冲突还得回滚。
2.2 九个插件按“解决什么”分三组
| 分组 | 插件 | 解决什么 | 典型用法 | 两个版本的注意点 |
|---|---|---|---|---|
| 定位类 | Maven Helper | 依赖冲突看不出来 | 打开 pom 底部 Dependency Analyzer 页签,看 Conflicts | 两版本行为一致 |
| 定位类 | Search in Repository | 记不住 Maven 坐标 | 快捷键搜类名反查 groupId/artifactId | 2022.2 里搜索源需要手动确认一次索引 |
| 定位类 | RESTfulToolkit | 拿到 URL 找不到 Controller | Ctrl+Alt+N 输 URL 路径直接跳 | 2022.2 需确认插件版本,老版本不兼容 |
| 定位类 | MyBatis XML/DAO 互跳 | 接口和 XML 来回翻 | 方法名上 Ctrl+Alt+左键 跳到对应 statement | 依赖项目里 XML 与 DAO 同包名约定 |
| 读代码类 | Grep Console | 控制台日志一片白 | 按 ERROR/WARN 配颜色和过滤 | 两版本一致 |
| 读代码类 | Rainbow Brackets | 嵌套括号数不清 | 按层级着色,光标所在层高亮 | 2022.2 注意与内置括号高亮重复 |
| 读代码类 | MyBatis Log Format | 日志里 SQL 是问号 | 把 Preparing 行和 Parameters 行拼成完整 SQL | 只对 MyBatis 原生日志格式生效 |
| 写代码类 | Lombok | getter/setter 满屏 | 注解生成,源码保持干净 | 必须开注解处理器,见 2.3 |
| 写代码类 | 代码规范扫描插件 | 命名、注释不规范 | 搜 “Coding Guidelines” 安装,右键扫描当前文件 | 2022.2 里规则集可能落后于新版语法 |
剩下的界面主题、右侧缩略图、Git 增强这几类,属于“装不装都行”。我的习惯是先跑一周,觉得哪一步重复操作超过十次,再去找对应插件,比照着清单一次装十几个要靠谱——装多了启动慢,而且插件之间的快捷键会打架。
2.3 Lombok 装上但注解还是红的
这是最高频的一个翻车点。Lombok 是编译期注解处理器,IDE 要能“看见”它生成的代码,必须同时满足两个条件:依赖在 classpath 上,且 IDEA 的注解处理开关打开。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> <!-- 版本交给父 POM 统一管理,手写版本号容易和 IDEA 内置的 Lombok 插件对不上 --> </dependency>scope用provided是因为 Lombok 只在编译期需要,运行期不应该进产物包。版本不写死是因为 Spring Boot 的父 POM 已经管了一份,手写反而会和 IDEA 自带插件冲突——典型症状是编译能过、IDE 里@Data生成的 getter 标红。
开关位置:Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors,勾上Enable annotation processing。2022.2 里这个选项默认是关的,2020.1.4 里部分项目模板会预置打开,所以同一份代码在两台机器上表现不一样,别怀疑代码。
2.4 装完核对一遍插件目录
插件装在配置目录的plugins下,升级大版本后目录名会带 build 号,老插件可能被禁用但不删除。用一条命令能看清实际装了哪些:
# Linux/macOS 下 IDEA 配置目录,2022.2 与 2020.1.4 的目录名不同 ls -1 ~/.config/JetBrains/*/plugins 2>/dev/null || \ ls -1 ~/Library/Application\ Support/*/plugins # 只看已启用(目录存在且未被 rename 成 .disabled) find ~/.config/JetBrains -maxdepth 2 -name "*.disabled" -type d第一段是列出插件目录内容,第二段找被禁用的插件(IDEA 禁用插件时给目录加.disabled后缀)。导出配置时这些被禁用的插件不会带过去,换机器后表现为“明明装了却没生效”,用这条命令三秒定位。
3. 编码与格式基线:把 UTF-8、4 空格、LF 一次钉死
3.1 三个默认值为啥会带来麻烦
File Encodings默认跟随系统 locale,中文 Windows 上落成 GBK;缩进默认 4 格但允许真 Tab 字符;换行符默认跟随操作系统,Windows 上是 CRLF。三个叠在一起,跨平台协作必然出问题:中文注释在同事机器上变乱码、git diff整个文件全红、编译报illegal character: '\ufffd'。
这类问题最难查的地方在于它不是每次都复现——同一份代码,提交者本地正常,拉下来的人一编译就报错,来回甩锅两轮才发现是编码。所以我的做法是把这三项当成项目基线,写进仓库而不是写进个人设置。
3.2 十项设置的路径与取值
| 设置项 | 路径 | 取值 | 影响 |
|---|---|---|---|
| 文件编码 | Settings -> Editor -> File Encodings | Global / Project Encoding 都选 UTF-8,BOM 不勾 | 中文注释乱码的根因 |
| Properties 转义 | 同上,底部Transparent native-to-ascii | 按项目约定,老项目一般勾 | 影响 properties 里的中文读取 |
| 缩进 | Settings -> Editor -> Code Style -> Java | Tab size 4、Indent 4、Use tab character不勾 | 混入真 Tab 后 diff 会乱 |
| 显示空白字符 | Settings -> Editor -> General -> Appearance | 勾Show whitespaces | 空格和 Tab 一眼可辨 |
| 换行符 | Settings -> Editor -> Code Style | Line separator选Unix and macOS (\n) | 决定新建文件的换行符 |
| 行号 | Settings -> Editor -> General -> Appearance | 勾Show line numbers | 2022.2 默认已开 |
| 右侧竖线 | Settings -> Editor -> General -> Appearance | 取消Show hard wrap guide | 纯视觉 |
| 自动导包 | Settings -> Editor -> General -> Auto Import | Java 两栏都勾Add unambiguous imports on the fly | 粘贴代码自动补 import |
| 代码提示大小写 | Settings -> Editor -> General -> Code Completion | 取消Match case | 大小写不敏感,str能提示String |
| 自动更新 | Settings -> Appearance & Behavior -> System Settings -> Updates | 选手动检查 | 见 5.4 |
重点说换行符这一项。它只影响“新建文件”的默认值,已有文件的换行符不会变,所以指望靠改这一项把仓库里历史 CRLF 全部转过来是不现实的——真要统一,得走.editorconfig加一次批量转换提交。
3.3 用 .editorconfig 把基线固化进仓库
个人设置只对自己有效,团队基线必须跟着代码走。2020.1 起 IDEA 内置支持 EditorConfig,在Settings -> Editor -> Code Style勾上Enable EditorConfig support即可,不需要额外装插件。
# 放在仓库根目录,文件名就叫 .editorconfig root = true [*] charset = utf-8 end_of_line = lf # 对应 Line separator = Unix insert_final_newline = true # 文件末尾补一个换行,避免 git 提示 "\ No newline" trim_trailing_whitespace = true indent_style = space indent_size = 4 [*.{yml,yaml,json,xml}] indent_size = 2 # 配置文件普遍用 2 空格 [*.md] trim_trailing_whitespace = false # Markdown 行尾两个空格是硬换行,不能删root = true表示到此为止不再向上查找,防止父目录的配置覆盖。insert_final_newline这一项看着不起眼,但它是 git diff 里\ No newline at end of file提示的唯一根治办法,老项目合并时这类噪音能占到 diff 的三成。
需要提醒的是,EditorConfig 的优先级低于 IDEA 自己保存的 Code Style 设置。如果本地已经手动改过缩进,EditorConfig 不一定生效——表现是“别人拉下来是对的,我这儿还是老样子”。遇到这种情况,去 Code Style 右上角把 Scheme 重置为 Project 默认。
3.4 一条命令验完行尾和 BOM
改完设置别急着提交,先扫一遍仓库现状:
# 找出带 CRLF 的 Java 文件,只列文件名,最多看 20 个 grep -rIl $'\r' --include='*.java' . | head -20 # 找出带 UTF-8 BOM 的文件(BOM 是 EF BB BF 三字节) grep -rIl $'\xEF\xBB\xBF' --include='*.java' . | head -20-r递归,-I跳过二进制文件,-l只输出文件名,$'\r'是 bash 的 ANSI-C 引用,表示回车符。第一段有输出说明历史文件还是 CRLF,第二段有输出说明有文件被某些编辑器加了 BOM——BOM 在 Java 里会导致第一个字符被当成\ufeff,编译直接报错。
这批文件不建议在业务提交里顺手带上,单独开一个 commit 只做行尾转换,方便 review 时整段跳过,也方便万一出问题直接 revert。
4. 热部署链路:从 Registry 开关到 DevTools 生效的完整路径
4.1 改一行代码到底卡在哪一步
IDEA 的保存和编译是分开的:Ctrl+S只把内容写盘,不生成.class;运行时 JVM 加载的是target/classes下的字节码。所以改完代码不重新编译,JVM 里跑的永远是旧类,重启一百次也没用。
热部署实际分两层。第一层是 JVM 自带的 HotSwap,只能替换方法体,加方法、加字段、改签名都不支持,改了就抛UnsupportedOperationException。第二层是 Spring Boot DevTools 的 restart classloader,它监控 classpath 变化,检测到.class更新就把应用上下文重建一遍,比冷启动快,但本质还是重启。两层配合才能覆盖大多数日常改动。
这条链路上有三个断点:自动编译没开、Registry 开关没开、DevTools 没引依赖。少任何一个,改完代码都得手动重启。
4.2 打开自动编译和 Registry 开关
第一步,Settings -> Build, Execution, Deployment -> Compiler,勾上Build project automatically。2020.1.4 和 2022.2 路径一致。
第二步,Ctrl+Shift+Alt+/打开 Registry(也可以在Help -> Find Action里搜 Registry)。在输入框里敲automake过滤,把compiler.automake.allow.when.app.running置为true。
compiler.automake.allow.when.app.running = true这个键的名字容易记混,它的含义是“应用正在运行时也允许自动编译”。不开启的话,IDEA 只在窗口失焦或手动 Build 时才编译,你改完代码切回浏览器刷新,JVM 里根本没新类。
两个版本的差异在这里:2022.2 里这个键的默认值已经是true,很多人打开 Registry 发现找不到它,其实是不需要改了;2020.1.4 里默认false,必须手动打开。所以从老版本迁到新版本时,别照着老教程死磕这个开关,先看Build project automatically有没有勾上,这一步才是决定性的。
4.3 DevTools 依赖和它的触发条件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>scope用runtime,因为代码里不直接引用它的类;optional设为true是为了防止它传递到依赖这个模块的其他工程里——DevTools 打包进生产环境会带来不必要的 classloader 行为,而且启动日志会多一堆重启提示。
它的触发条件是 classpath 上的.class或资源文件发生变化,不是“文件保存”这个动作。所以自动编译不开,DevTools 永远等不到事件。另外它默认排除了META-INF/maven、META-INF/resources、static、public、templates这些静态资源目录,改静态资源不会触发重启,只会走资源刷新,这是设计如此,不是配置没生效。
4.4 哪些改动热部署救不了
| 改动类型 | HotSwap | DevTools 重启 | 说明 |
|---|---|---|---|
| 方法体内逻辑 | 支持 | 支持 | 最常见的场景 |
| 新增/删除方法 | 不支持 | 支持 | 会重建上下文 |
| 新增/删除字段 | 不支持 | 支持 | 静态字段要特别注意初始化 |
| 修改注解参数 | 不支持 | 部分 | 涉及 Bean 定义的注解需要完整重启 |
| 修改 Spring Bean 依赖关系 | 不支持 | 支持 | 构造器注入变化会重建 |
| 修改模板文件 | 不涉及 | 取决于缓存配置 | 见下方配置 |
模板类资源要单独处理缓存,否则改了页面刷新没反应:
spring: thymeleaf: cache: false # 模板改动立刻生效,不走重启 devtools: restart: enabled: true exclude: static/**,public/** # 这些目录的改动只刷资源,不重建上下文exclude里列的是不需要重启的路径,配得越细,重启次数越少。但别把所有路径都排掉,不然改了 Java 代码也不会重启,反而更麻烦。
5. 避坑与排查:五条配置不生效的现场记录
5.1 Registry 里搜不到 automake 开关
现象:按Ctrl+Shift+Alt+/打开 Registry,输入框里敲完整键名,列表空的。
原因有两个。一是 2022.2 里这个键的默认值就是true,IDEA 对默认值的键不一定全部列出;二是 Registry 输入框是模糊匹配,敲完整键名反而筛不出来,得敲片段。
解决:先把Build project automatically勾上,再回 Registry 只敲automake。如果还是没有,说明当前版本已经不需要这个开关,直接验证 DevTools 有没有生效即可——改一行日志级别,看控制台有无 restart 提示,比死磕注册表快得多。
5.2 隐藏 .iml 和 .idea 之后,模块结构乱了
现象:把.iml、.idea加进忽略后,Project 视图里模块目录变灰,右键新建找不到 Java Class,Ctrl+点击也跳不动。
原因:加错了地方。Settings -> Editor -> File Types -> Ignored Files and Folders只是显示层过滤,不影响索引;但如果加到了Project Structure -> Modules的Excluded目录里,IDEA 会真的停止索引这些路径,模块识别自然出问题。
解决:回Project Structure -> Modules,把被 Excluded 的目录删掉,恢复成 Sources 或 Resources;隐藏文件只走 File Types 那一处。这两个入口长得像,功能差得远,我见过不止一个人在这上面耗掉半天。
5.3Private field is never assigned警告关不掉
现象:@Autowired注入的字段一直标黄,鼠标悬停提示这个字段从未被赋值。
原因:这条警告来自Settings -> Editor -> Inspections -> Java -> Unused declaration里的Entry points配置。它对“赋值”的判断只看代码里的显式赋值,不认识框架的注入。
解决:在同一个 Inspections 页面,把@Autowired(以及@Resource、@Inject)加到该检查项的 Entry points 列表里。加完之后这些注解标注的字段会被当成外部赋值,警告消失。注意这是全局设置,加进去之后所有项目都不再报,别在临时项目里加完忘了,回主项目找不到原因。
5.4 换行符改成 Unix 后,git diff 整个文件全红
现象:明明只改了一行,git diff显示整个文件都是改动。
原因:仓库历史内容是 CRLF,本地转了 LF,git 按字节比对,每一行都算变更。这时千万别git add -A直接提交,会让 code review 完全没法看。
解决:单独提一个 commit 只做行尾转换,commit message 写清楚;然后在仓库根目录加.gitattributes,写* text=auto eol=lf让 git 在检出和提交时自动处理。顺序上必须先提交转换再改 gitattributes,反过来会让其他人的工作区出现一批“莫名其妙”的改动。
5.5 改了文件文件夹变色,新增文件不变色
现象:修改已有文件,Project 视图里父目录变蓝;新建的文件却一直是灰的,看不出待提交状态。
原因:IDEA 的变色逻辑只跟踪已纳入版本控制的文件。新建文件还没git add,状态是 Unversioned,走另一套颜色提示,在项目树里不明显。
解决:在Settings -> Version Control -> Confirmation里勾上Add silently,新建文件自动加入暂存区;或者养成习惯,走Ctrl+K提交面板统一看 Unversioned 分组。后者更稳,尤其多人协作时,自动 add 容易把不该提交的临时文件带进去。
6. 快捷键迁移:把 Eclipse 的 Ctrl 肌肉记忆搬到 IDEA
Eclipse 里在类或方法上按住 Ctrl,弹的是“跳接口 / 跳实现 / 跳返回值”的选项;IDEA 里 Ctrl+左键直接跳声明,剩下的要靠快速访问列表(Quick Lists)补回来。
配置路径:Settings -> Keymap -> Quick Lists,点加号新建一个列表,把这几项塞进去——Go to Implementation、Go to Declaration、Show Usages、Find in Path。然后到 Keymap 主界面搜你刚建的列表名,右键Add Keyboard Shortcut,绑成Ctrl+左键(鼠标快捷键走Add Mouse Shortcut)。之后在类或方法上按住 Ctrl+左键,就会先弹这个列表。
列模式是另一个值得单独绑的。标准列模式用Alt+左键下拉,适合给多行同位置加前缀;不规则列模式用Shift+Alt+左键点击分别点选位置,适合只改某几行的尾部。这两个组合键在 2020.1.4 和 2022.2 上一致,但要注意先关掉输入法的全角状态,否则 Shift 会被吞。
自定义缩写顺带提一句:sout是 IDEA 默认模板,从 Eclipse 过来的人习惯syso。去Settings -> Editor -> Live Templates -> output,选中sout点复制,改名为syso即可,模板体不用动。
配置搬到新机器走File -> Manage IDE Settings -> Export Settings,导出的是 zip 包。跨版本恢复时有两个已知不对齐的地方:
| 配置项 | 2020.1.4 路径 | 2022.2 路径 |
|---|---|---|
| 自动编译 | Build, Execution, Deployment -> Compiler | 同名,但多一个 Build Tools 子节点 |
| 内存指示器 | 双击 Shift 搜Show Memory Indicator | View -> Appearance -> Status Bar Widgets 里勾 |
内存指示器这个尤其明显,老版本靠搜索开关,新版本挪进了状态栏组件菜单,导出的配置里不包含这一项,换机器后得手动勾一次。
我的习惯是每次换机器或大版本升级后,先把.editorconfig、Build project automatically、注解处理器、Registry 这三项按顺序过一遍,再打开一个老项目编译一次看有没有标红。这套动作已经成了肌肉记忆——前几年吃过一次亏,配置全导过去了,唯独注解处理器那个开关没跟着走,排查了两个小时才发现是环境问题不是代码问题。希望帮到你。
本文还有配套的精品资源,点击获取