前言
--
今天不聊高併發、不聊架構設計,想和大家聊一個每位 Java 程式設計師每天都在用的工具——IntelliJ IDEA。
說實話,用了多年的 IDEA,我踩過不少坑。
今天我把最經典的 10 個坑整理出來,希望能幫大家少走一些彎路。
很多小夥伴在工作中肯定也遇到過類似的問題,比如「IDEA 突然變卡了」、「程式碼明明沒錯就是編譯不過」、「Debug 的時候中斷點不生效」等等。
這篇文章沒有高深的理論,全是實戰經驗,新手也能看懂。
希望對你會有所幫助。
更多專案實戰在我的技術網站:susan.net.cn/project
在正式開講之前,我們先來客觀地看一下 IDEA 這款 IDE 到底好在哪、不好在哪,以及適合什麼場景。
場景是否推薦說明大型 Java/Spring 專案⭐⭐⭐⭐⭐IDEA 的 Spring 支援無出其右中小型 Web 專案⭐⭐⭐⭐⭐開發效率遠高於 Eclipse多語言混合專案(Java+JS+Python)⭐⭐⭐⭐⭐Ultimate 版支援所有主流語言老舊機器(記憶體<8G)⭐⭐勉強能用,但建議升級配置或換 VS Code純前端專案⭐⭐VS Code 可能更合適學生/開源學習⭐⭐⭐⭐Community 版足夠用好了,了解這些背景之後,咱們正式進入主題——我踩過的 10 個坑。
IDEA 開啟兩三個小時之後,敲個程式碼都要卡兩秒,滑鼠轉圈圈,CPU 動不動就 100%。
重啟一下又好一會兒,過一會兒又卡了。
IDEA 的卡頓通常有兩個原因:記憶體分配不足和索引被頻繁觸發。
先說說記憶體。
IDEA 預設的堆積記憶體只有 512MB-1GB 左右,對於現代專案(尤其是微服務專案,一個 workspace 裡有十幾個 module)來說,這點記憶體根本不夠用。
JVM 頻繁進行 Full GC,自然就卡了。
再說說索引。
IDEA 會對專案中的所有檔案建立索引,以便實現快速搜尋、跳轉等功能。
但是如果你開啟了「自動索引外部檔案」或者專案中有一個巨大的 node_modules 資料夾(前端同學懂得),IDEA 就會一直嘗試索引這些根本不需要索引的檔案,CPU 直接拉滿。
第一步,手動調整 IDEA 的記憶體配置。
找到 IDEA 安裝目錄下的 idea64.exe.vmoptions 檔案(Mac 在 /Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions),修改以下參數:
properties 体验AI代码助手 代码解读复制代码# 建議配置(8G 記憶體機器)
-Xms2048m # 初始堆積記憶體,建議直接給到 2G
-Xmx4096m # 最大堆積記憶體,給到 4G
-XX:ReservedCodeCacheSize=512m # 程式碼快取
-XX:+UseG1GC # 使用 G1 垃圾回收器,減少停頓
-XX:+UseStringDeduplication # 去重字串,節省記憶體
第二步,排除不需要索引的目錄。
打開 File -> Settings -> Project Structure -> Modules,把那些不需要索引的資料夾(如 node_modules、.git、target、build 等)標記為 Excluded。
![轉存失敗,建議直接上傳圖片檔案]()
做完這兩步,IDEA 的流暢度會有一個質的飛躍。
本來好好的專案,更新了 IDEA 或者改了某個配置之後,所有用 @Data、@Getter 註解的類別的呼叫地方突然飄紅,編譯失敗,提示「找不到 getXxx 方法」。
Lombok 的工作原理是在編譯期透過註解處理器自動生成 getter/setter 等程式碼。
IDEA 需要安裝 Lombok 外掛才能識別這些生成的程式碼,否則就會報紅。
這個坑通常發生在以下幾種情況:
第一步,檢查 Lombok 外掛是否安裝並啟用。File -> Settings -> Plugins 搜尋 Lombok,確保已安裝且勾選。
第二步,打開 File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors,勾選「Enable annotation processing」。
第三步,確保專案的 pom.xml 或 build.gradle 中引入了 Lombok 依賴,並且版本不要太老。推薦版本:
xml 体验AI代码助手 代码解读复制代码<!-- Maven -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
第四步,如果上面三步都做了還是不行,嘗試 File -> Invalidate Caches and Restart,清空 IDEA 的快取並重啟。這個操作能解決 IDEA 裡 80% 的玄學問題。
有一次我遇到一個特別詭異的情況:同一個專案,同事的 IDEA 沒問題,我的就是報紅。
最後發現是 .idea 目錄下的配置檔衝突了,刪掉 .idea 目錄讓 IDEA 重新生成就正常了。
除錯的時候,我在一個 Service 方法的第一行打了一個中斷點,但是跑起來中斷點根本不生效,程式碼直接執行過去了。
更離譜的是,有時候中斷點上的勾勾是灰色的。
這個坑有幾種可能:
首先,檢查中斷點圖示。正常中斷點是紅色圓點,如果帶斜線,點擊右鍵取消「Disable」。
或者按 Ctrl + Shift + F8 打開中斷點管理面板,看看是不是所有中斷點都被禁用了。
其次,確保中斷點打在可執行行上。比如:
java 体验AI代码助手 代码解读复制代码// ❌ 以下位置不能打中斷點
public void doSomething() // 方法簽名行
// ✅ 這樣是可以的
public void doSomething() {
System.out.println("這裡可以打中斷點"); // 第一行大括號後的有效程式碼
}
第三,如果是在多執行緒除錯中,檢查一下條件中斷點。IDEA 支援在中斷點上按右鍵設定條件,比如 str == null。如果條件永遠不滿足,中斷點當然不會觸發。
第四,終極方案:使用 Thread.currentThread().getStackTrace() 印出堆疊來定位問題,或者改用日誌輸出。
執行專案,主控台印出的日誌中,中文全部變成了 ??? 或者 \uXXXX 這樣的亂碼。
System.out.println("你好") 輸出的是「???」。
亂碼的本質是編碼不一致。
IDEA 的主控台、專案的原始檔編碼、JVM 的預設編碼、作業系統編碼這四個地方只要有一個對不上,就可能出現亂碼。
常見的情況是:
file.encoding 參數沒有正確設定第一步,統一所有地方的編碼為 UTF-8。
打開 File -> Settings -> Editor -> File Encodings:
第二步,修改 IDEA 主控台的編碼。在 Help -> Edit Custom VM Options 中新增:
properties 体验AI代码助手 代码解读复制代码-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
第三步,對於 Maven 專案,在 pom.xml 的 maven-surefire-plugin 和 maven-compiler-plugin 中也指定編碼:
xml 体验AI代码助手 代码解读复制代码<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
第四步,如果用的是 Logback 或 Log4j,檢查日誌配置檔的編碼,比如 Logback:
xml 体验AI代码助手 代码解读复制代码<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 關鍵 -->
</encoder>
</appender>
做完這些配置之後,重啟 IDEA,亂碼問題一般就能解決了。
用 IDEA 內建的 Git 提交程式碼時,Commit Changes 視窗裡總是出現一些不應該提交的檔案,比如 .idea/workspace.xml、target/ 目錄下的 class 檔、.iml 檔等。
有時候一不小心就提交上去了,污染了 Git 倉庫。
IDEA 預設會把專案的 .idea 目錄和 .iml 檔納入版本控制,因為這些檔案記錄了專案的配置信息。
但問題是,這些檔案裡可能包含本機路徑、個人配置等環境相關的信息,不同機器之間不應該共享。
target/ 目錄是編譯產物,更不應該提交。
根本原因是沒有配置 .gitignore 檔案,或者配置了但 IDEA 沒有正確識別。
在專案的根目錄下建立 .gitignore 檔案,把以下內容放進去:
gitignore 体验AI代码助手 代码解读复制代码# Compiled class file
*.class
target/
out/
# IntelliJ IDEA
.idea/
*.iml
*.iws
*.ipr
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/compiler.xml
.idea/libraries/
# Log file
*.log
*.log.gz
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
然後在 IDEA 中,打開 Settings -> Version Control -> Ignored Files,確保沒有任何衝突的規則。
如果你的 .gitignore 檔案已經在 Git 倉庫中,並且之前已經錯誤地提交了 .idea 目錄,需要先執行命令從 Git 快取中移除:
bash 体验AI代码助手 代码解读复制代码git rm -r --cached .idea
git commit -m "Remove .idea from git"
之後再提交,就只會看到需要提交的原始碼檔案了。
在 IDEA 中重新整理 Maven 專案(Reload All Maven Projects)時,右下角一直在轉圈,下載依賴特別慢,有時候直接逾時報「Transfer failed」或者「Read timed out」。
Maven 預設的中央倉庫在國外,網路延遲大,下載速度自然慢。
IDEA 雖然內建了 Maven,但預設會使用 Maven 自帶的 settings.xml,其中沒有配置國內鏡像。
另外,IDEA 的 Maven 和命令列 Maven 可能會共用同一個本機倉庫(~/.m2/repository),如果同時操作,會出現鎖定檔案衝突。
第一步,配置國內鏡像來源。
在 File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven 中,找到 User settings file,點擊「Override」,然後選擇或建立一個 settings.xml 檔案,填入以下內容:
xml 体验AI代码助手 代码解读复制代码<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<!-- 阿里雲 Maven 鏡像 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里雲公共倉庫</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
第二步,在 Maven 設定中,把「Work offline」關掉(除非你真的要離線工作),把「Import Maven projects automatically」打開,這樣依賴變更時會自動下載。
第三步,如果你的網路環境特別差,可以嘗試配置 IDEA 的 HTTP Proxy。Settings -> Appearance & Behavior -> System Settings -> HTTP Proxy,如果公司有內網代理,填進去即可。
配置完成後,點擊 Maven 面板上的「Reload All Projects」按鈕,下載速度應該會明顯提升。
在 IDEA 裡 Maven 編譯沒有任何錯誤,mvn clean compile 也成功了。
但是執行 main 方法或者啟動 Spring Boot 時,主控台報錯:java.lang.ClassNotFoundException: com.xxx.SomeClass。
這個坑的原因很隱蔽:IDEA 的編譯器和 Maven 的編譯輸出目錄不一致。
IDEA 預設的編譯輸出目錄是 專案根目錄/out/ 或者 target/classes/,而 Maven 的編譯輸出目錄是 target/classes/。
如果你修改過專案結構,或者 IDEA 的快取亂了,可能會導致 IDEA 執行時用的 classpath 裡找不到某些類別。
另一個常見原因是:使用了 Lombok,但是 IDEA 的註解處理器沒有生成程式碼,或者生成的程式碼路徑不對。
首先,打開 File -> Settings -> Build, Execution, Deployment -> Compiler,確保「Build project automatically」是勾選的(但注意這會在你儲存檔案時自動編譯,對效能有影響)。
然後,檢查 File -> Project Structure -> Modules,看每個 module 的「Output path」和「Test output path」是否指向了正確的目錄。一般來說,Maven 專案應該指向 target/classes 和 target/test-classes。
![轉存失敗,建議直接上傳圖片檔案]()
最暴力的解決方法:點擊 Build -> Rebuild Project 清空所有編譯輸出,然後重新編譯。如果還不行,執行 File -> Invalidate Caches and Restart 清空快取。
還有一個絕招:用 Maven 命令列先打包,然後手動執行打好的 jar 包,看是不是同樣的問題。
如果 jar 包能執行,那就是 IDEA 的執行配置有問題;如果 jar 包也報錯,那就是程式碼本身有依賴問題。
習慣了用 Ctrl+C、Ctrl+V 複製貼上程式碼,突然有一天發現快捷鍵不管用了,或者按下去之後出現奇怪的行為(比如彈出某個面板、刪除文字等)。
更離譜的是,Ctrl+Alt+L 格式化程式碼也無效。
IDEA 的快捷鍵衝突通常有兩種情況:
Ctrl+Alt+A,和 IDEA 的一些外掛快捷鍵重複;搜狗輸入法的 Ctrl+Shift+F 會切換繁簡體。第一步,檢查是否切換了 keymap。
打開 File -> Settings -> Keymap,看看目前選中的 keymap 是不是你常用的(比如 Windows 預設是 Default,Mac 是 Mac OS X)。如果顯示 Default copy 或者別的,說明被改過了。可以點擊「Restore Defaults」恢復預設。
第二步,排查外部軟體衝突。
常見的衝突有:
Ctrl+Alt+WCtrl+Shift+F(繁簡體切換)、Ctrl+Shift+E(表情)Ctrl+Alt+A(截圖)Ctrl+Alt+上/下(音量)解決方法是去這些軟體裡修改快捷鍵,或者直接關閉它們。我個人的習慣是寫程式碼的時候把聊天軟體退了,清淨。
第三步,如果只有某個特定快捷鍵失效,可以在 Keymap 裡搜尋這個快捷鍵的動作,看看是不是被占用了。
比如搜尋 Reformat Code(格式化程式碼),預設是 Ctrl+Alt+L,如果顯示多個動作,說明有衝突,可以右鍵移除一個。
IDEA 內建的 Database 工具(很好用,很多小夥伴可能不知道)連接 MySQL 時,報錯:The server time zone value '???ú±ê×??±??' is unrecognized 或者 Could not create connection to database server.
MySQL 8.0 以上版本要求明確指定時區參數 serverTimezone。IDEA 的 Database 連接配置預設不包含這個參數,導致了錯誤。
在 IDEA 的 Database 面板中,點擊資料來源設定,進入「Advanced」選項卡,手動新增一個參數:
Name: serverTimezoneValue: Asia/Shanghai 或者 UTC如果還不行,在「General」頁面的 URL 後面直接加上:
bash 体验AI代码助手 代码解读复制代码jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8
另外,如果是用 Spring Boot 專案的資料來源配置,也建議在連接池的 URL 中加入這些參數,防止執行時報同樣的錯。
最後,檢查一下 MySQL 驅動版本。IDEA 預設會下載最新的驅動,但如果你的 MySQL 是 5.7 版本,用 8.x 的驅動可能會不相容。
可以在資料來源的「Driver」下拉選單中選擇舊版本。
團隊協作時,你提交程式碼前 IDEA 自動幫你格式化了程式碼(Ctrl+Alt+L)。
結果提交上去之後,整個檔案的縮排、換行、空行全變了。
你的改動可能只有一行,但是 git diff 裡卻顯示了整個檔案幾百行的變更。
程式碼 Review 的時候,同事根本看不出你到底改了什麼。
這是 IDEA 的「崇高」功能——在提交程式碼時自動執行程式碼格式化、最佳化匯入等操作。
初衷是好的,希望保持程式碼風格統一。
但是,如果團隊成員沒有使用統一的程式碼格式化規則(比如每個人的縮排設定不同:有的用 4 空格、有的用 2 空格、有的用 Tab),就會導致互相覆蓋、diff 爆炸。
有兩種解決思路:
方案一:統一團隊程式碼格式(推薦)
在專案根目錄下放置一個 .editorconfig 檔案,這是各大 IDE 和編輯器共同遵守的格式規範:
ini 体验AI代码助手 代码解读复制代码# .editorconfig
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.java]
indent_size = 4
[*.xml]
indent_size = 2
IDEA 會自動識別 .editorconfig,並提示是否採用。這樣所有人都用同一套規則。
同時,在 IDEA 中匯出程式碼格式化規則(File -> Settings -> Editor -> Code Style -> Java -> Manage -> Export),把檔案放進專案版本控制,讓同事匯入。
方案二:關閉自動格式化功能
如果你不想自動格式化,可以關掉。打開 File -> Settings -> Version Control -> Commit,把「Reformat code」、「Optimize imports」、「Rearrange code」前面的勾全部取消。
這樣一來,提交的時候就只會提交你手動改動的部分,不會動其他程式碼。當然,你需要自己保證程式碼格式是 OK 的。
個人建議採用方案一,這樣既保持了程式碼整潔,又不會引起格式衝突。
好了,10 個坑終於講完了。
我來幫大家快速回顧一下:
序號坑一句話解決方案1IDEA 越來越卡調大記憶體 + 排除無需索引的目錄2Lombok 失效裝外掛 + 開啟註解處理3中斷點進不去打在有效行 + 檢查禁用狀態4主控台中文亂碼統一 UTF-8 + JVM 參數5Git 提交了不該提交的檔案配置 .gitignore + 移除已提交的6Maven 依賴下載慢配置阿里雲鏡像7ClassNotFoundException 檢查編譯輸出目錄 + Rebuild8快捷鍵失靈檢查 keymap + 關閉衝突軟體9資料庫時區錯誤新增 serverTimezone 參數10提交時自動改格式統一 .editorconfig 或關閉自動格式化最後用一張圖來總結一下這些坑的應對思路:
![轉存失敗,建議直接上傳圖片檔案]()
寫這篇文章,一方面是幫大家避坑,另一方面也是對自己這些年 IDEA 使用經驗的一個總結。
工欲善其事,必先利其器。
IDEA 確實是一個非常強大的工具,但再強大的工具,如果不會用、用不對,也會變成絆腳石。
希望這篇文章能給大家帶來實實在在的幫助。
如果你也踩過其他「奇葩」的坑,歡迎在留言區分享。
咱們互相學習、共同進步!
更多專案實戰在我的技術網站:susan.net.cn/project