IDEA 2022.1起默认禁用自动编译,需同时启用“Build project automatically”并开启Registry中compiler.automake.allow.when.app.running才能实现保存即编译和热更新。

IDEA 从 2022.1 开始默认禁用自动编译,必须手动开启
IntelliJ IDEA 在较新版本(尤其是 2022.1 及之后)中,默认关闭了“保存即编译”行为,即使勾选了 Build project automatically,也不代表文件一保存就触发编译。这是为了兼容构建工具(如 Maven/Gradle)的生命周期管理,但对纯 Java 开发者来说反而降低了效率。
要真正实现“改完代码、Ctrl+S、立刻生效”,需同时满足两个条件:
- 启用
Build project automatically(Settings → Build → Compiler) - 允许 IDE 在运行/调试时自动触发编译:
Registry中开启compiler.automake.allow.when.app.running
打开 Registry 的快捷键是 Ctrl+Shift+A(Win/Linux)或 Cmd+Shift+A(macOS),输入 registry 回车,搜索该 key 并勾选。不开启这项,断点调试时修改代码会提示“Hot swap failed”,因为类根本没重新编译。
为什么改了 Java 文件却不触发 class 输出?检查 output path 和 module 设置
即使自动编译已启用,仍可能看不到 .class 文件生成——常见原因是模块输出路径未正确配置,或源码根目录(src)未被标记为 Sources Root。
立即学习“Java免费学习笔记(深入)”;
确认方式:
- 右键项目中的
src目录 →Mark Directory as→ 确保是Sources Root(蓝色图标) - File → Project Structure → Modules → 选中对应 module →
Paths标签页 → 检查Output path是否指向out/production/xxx或target/classes(Maven 项目应使用后者) - 若用 Maven,建议勾选
Delegate IDE build/run actions to Maven(Settings → Build → Build Tools → Maven → Runner),否则 IDEA 自己的编译器可能忽略pom.xml中的sourceCompatibility配置
自动编译 + Spring Boot 热部署:别只靠 spring-boot-devtools
spring-boot-devtools 默认只监听 classpath 下的资源变更,而 IDEA 自动编译输出的 class 若不在其监控路径内(比如输出到 out/ 而不是 target/classes),热更新就会失效。
推荐组合方案:
- Maven 项目:关闭 IDEA 自带编译器,改用 Maven 构建 → Settings → Build → Compiler → 取消勾选
Build project automatically - 改用
Ctrl+Shift+F9手动编译单个类,或绑定快捷键给Reload project(针对 pom 变更) - 确保
spring.devtools.restart.additional-paths包含你的源码目录(如src/main/java),并开启spring.devtools.restart.enabled=true - 如果坚持用 IDEA 编译,需在
Project Structure → Modules → Paths中把Output path显式设为target/classes,且不要勾选Use module compile output path
自动编译卡顿、CPU 占用高?关掉这些干扰项
开启 Build project automatically 后,IDEA 可能频繁扫描文件、触发编译,尤其在大型项目中拖慢响应速度。以下几项可显著缓解:
- Settings → Editor → General →
Auto-save edited files if application is idle for X sec:调大空闲时间(如 3000ms),避免每秒都触发保存→编译循环 - Settings → Build → Compiler → 取消勾选
Compile independent modules in parallel(多模块项目才需考虑) - 排除非 Java 文件夹:右键目录 →
Mark Directory as→Excluded(如node_modules、dist) - 禁用非必要插件:如 Lombok 插件旧版本与自动编译冲突,升级到 24.x 或更高可缓解
最易被忽略的是:自动编译不会跳过语法错误,哪怕只是少了个分号,也会卡住整个编译流程,并静默失败——此时看 Build 工具窗口底部状态栏,常显示 “Compilation completed with 1 error” 却不弹窗提醒。










