使用IDEA啟動項目遇見ClassNotFoundException的解決方案
一. 錯誤現(xiàn)象
本地開發(fā) SpringBoot 項目的時候,在集成 MyBatis 查詢數(shù)據(jù)庫的時候,使用 IDEA 啟動項目的時候,有時候會遇見如下的報錯:
Caused by: java.sql.SQLException: com.mysql.jdbc.Driver at com.alibaba.druid.util.JdbcUtils.createDriver ...... Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:382) .......
二. 正確的解決姿勢
1. 是否添加了mysql 驅(qū)動
去 pom.xml 里查看是否添加了mysql 驅(qū)動。如果之前沒有添加,需要引入 mysql 的 jar 驅(qū)動:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
重新編譯后運行,如果還是報這個錯,看第 2 步。
2. 執(zhí)行 mvn install
執(zhí)行 IDEA 里的 mvn install 命令,下載可能缺失的 jar 包。 如果重新編譯后運行還是不行,看第 3 步。
3. 檢查配置文件是否有錯
.yml 和 .properties 的配置文件對格式都有嚴(yán)格要求,確認(rèn)一下自己的數(shù)據(jù)庫連接配置是否有格式錯誤。
比如:
行首和行位是否有空格之類的。 4. 找到原因
筆者按照前面的 3 個步驟反復(fù)檢查確認(rèn),依然還是報這個錯誤,折騰了半天。會不會 IDEA 哪個地方的設(shè)置有問題。
命令行執(zhí)行jar包
為了驗證猜想,于是進到 jar 包所在的工程目錄下面, 在命令行下直接使用java -jar 的方式啟動:
java -jar projectName.jar`
卻發(fā)現(xiàn)服務(wù)能夠正常啟動起來,沒有報java.lang.ClassNotFoundException這個錯誤。 由于我的項目是 SpringBoot 聚合工程,于是就猜測會不會是這個 模塊下的依賴沒有被 IDEA 讀到呢?
驗證猜想
通過 File -> Project Structure -> Project Settings -> Modules 打開 彈窗,選中該模塊,在右側(cè)找到 Dependencies 選項卡并打開,在下面會出現(xiàn)該模塊依賴的 jar 包列表:
仔細(xì)找了一會兒,發(fā)現(xiàn)竟然沒有找到第 1 步添加的 mysql 的 jar 包。找到了問題的原因,下面就列出三種解決辦法。
5. 添加Module的 Dependencies
方式一
- 打開添加 Dependencies 的彈窗
- 添加 mysql jar包
點 +
號,然后選擇 Library
:
點 Add Selected
保存。
方式二 選中模塊后右鍵
在彈出的菜單中選擇 Reimport
,則會重新從 pom.xml 里解析并下載依賴。
方式三
如果你在在開發(fā)過程中新建了一個模塊,然后刪除了該模塊,后邊又新建了一個相同名字的模塊,則依賴也是引不進來的。 這是因為 IDEA 默認(rèn)已經(jīng)刪除的模塊將不再使用,解決辦法:
打開 項目目錄 .idea/misc.xml 文件:
刪除掉圈紅的該行(對應(yīng)你之前刪掉的模塊名)
重新新建同名的模塊,依賴就可以正常導(dǎo)入。
三. 總結(jié)
- 遇到這種情況,先確認(rèn)代碼級別是否有什么遺漏或者配置文件是否格式有錯誤,注意不要忘記執(zhí)行 clean 、install、package ;
- 可以在命令行執(zhí)行 Jar 包:
如果仍然報同樣的錯誤,則還是在代碼級別上有錯誤,需要仔細(xì)的排查;
如果不報錯,那就可以確定是 IDEA 在某處的設(shè)置有問題,比如 Jar 包的版本默認(rèn)選擇不對、mvn選擇的版本過低、module 的依賴沒有引進來等。
到此這篇關(guān)于使用IDEA啟動項目遇見ClassNotFoundException的正確解決姿勢的文章就介紹到這了,更多相關(guān)使用IDEA啟動項目遇見ClassNotFoundException的正確解決姿勢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程
這篇文章主要介紹了JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10SpringBoot ThreadLocal 簡單介紹及使用詳解
ThreadLocal 叫做線程變量,意思是 ThreadLocal 中填充的變量屬于當(dāng)前線程,該變量對其他線程而言是隔離的,也就是說該變量是當(dāng)前線程獨有的變量,這篇文章主要介紹了SpringBoot ThreadLocal 的詳解,需要的朋友可以參考下2024-01-01Java跳出當(dāng)前的多重嵌套循環(huán)的五種方法
在Java編程中,跳出多重嵌套循環(huán)可以使用break語句、標(biāo)號與break組合、return語句、標(biāo)志變量和異常處理五種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10springcloud?feign?接口指定接口服務(wù)ip方式
這篇文章主要介紹了springcloud?feign?接口指定接口服務(wù)ip方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03