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