springboot3.x中Jakarta包無法引入的問題
最近想將一些項目升級到springboot3.x和java17的時候,發(fā)現(xiàn)項目依賴中有Jakarta的包,但是代碼標紅提示沒有相關的類,特此記錄一下排查問題和最終解決問題的思路方法
一、發(fā)現(xiàn)問題
因為之前有創(chuàng)建過 springboot3.x + java17 的項目,也運行正常。所以最近想著將一些舊項目也做一下update,但是不幸運的是,當改了一通代碼后編譯的時候,提示 "程序包jakarta.annotation不存在"。
下圖看到 Resource 注解是標紅提示沒有找到。
之前也知道Java EE要遷移到Jakarta EE,也對整個項目的相關代碼進行了修改,但是為什么還會提示有異常呢?
二、分析問題
1.依賴引入
首先考慮的肯定是對應的包是否已經(jīng)引入進來,于是查看了項目的依賴
依賴里面明明是有的,為什么還是提示沒有這個注解類呢?
于是 mvn clean、ide清緩存索引等等一波操作后,仍是無果....
2.發(fā)現(xiàn)問題點
后來看了一下項目配置,看了一下這里面的依賴,好家伙,作用域scope居然是test...
那為什么作用域會是測試階段的呢?
3.查看依賴關系
那就看看到底是從哪里引入進來的
通過依賴分析工具,查到原來是從 spring-boot-starter-test 引入進來的,而項目中這個依賴的作用域確實是 test
那問題來了,為什么之前的項目就可以的呢?不過這個 jakarta 包不應該是從測試依賴導入進來的?。?/p>
4.對比分析
于是對比了一下之前運行正常的項目,看看這個 jakarta 包是如何正常引入進來運行的。
好家伙,原來是從 spring-boot-starter-web 引入進來的,同時也看看其他的幾個 jakarta 包。
真的不看不知道,平常真沒怎么注意到這里面的依賴學問,因為自從用了 springboot 的 starter ,就真的很少關注到這些問題。
三、解決問題
要調(diào)整的這個項目里面因為是要打成jar包給其他項目使用,所以我就不想引入太多依賴包,就沒有引入 starter,只是單純的引入了 spring-web 這個包,但是這里面并沒有 jakarta 依賴,而剛好項目里面又引入了一些單元測試用的依賴,所以陰差陽錯就將 jakarta 以 test 作用域引入進來了...
所以,最終還是要引入 spring-boot-starter-web,不過我最后還是沒妥協(xié),只引入所需的依賴包
<dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> </dependency>
四、后續(xù)
通過查閱一些資料發(fā)現(xiàn),原來 Java 17 已經(jīng)不包括 jarkarta 模塊...
在 Java 17 中,Jakarta EE 被移除,取而代之的是引入了 Java EE 的一部分作為擴展模塊。要在 Java 17 中使用 Java EE 的功能,你需要在項目的 pom.xml 文件中添加相應的依賴
到此這篇關于springboot3.x中Jakarta包無法引入的問題的文章就介紹到這了,更多相關springboot Jakarta包無法引入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解SpringBoot靜態(tài)方法獲取bean的三種方式
本文主要介紹了詳解SpringBoot靜態(tài)方法獲取bean的三種方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Mybatis中typeAliases標簽和package標簽使用
這篇文章主要介紹了Mybatis中typeAliases標簽和package標簽使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建)
這篇文章主要介紹了springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建),需要的朋友可以參考下2020-08-08