springboot3.x中Jakarta包無法引入的問題
最近想將一些項(xiàng)目升級(jí)到springboot3.x和java17的時(shí)候,發(fā)現(xiàn)項(xiàng)目依賴中有Jakarta的包,但是代碼標(biāo)紅提示沒有相關(guān)的類,特此記錄一下排查問題和最終解決問題的思路方法
一、發(fā)現(xiàn)問題
因?yàn)橹坝袆?chuàng)建過 springboot3.x + java17 的項(xiàng)目,也運(yùn)行正常。所以最近想著將一些舊項(xiàng)目也做一下update,但是不幸運(yùn)的是,當(dāng)改了一通代碼后編譯的時(shí)候,提示 "程序包jakarta.annotation不存在"。
下圖看到 Resource 注解是標(biāo)紅提示沒有找到。
之前也知道Java EE要遷移到Jakarta EE,也對(duì)整個(gè)項(xiàng)目的相關(guān)代碼進(jìn)行了修改,但是為什么還會(huì)提示有異常呢?
二、分析問題
1.依賴引入
首先考慮的肯定是對(duì)應(yīng)的包是否已經(jīng)引入進(jìn)來,于是查看了項(xiàng)目的依賴
依賴?yán)锩婷髅魇怯械模瑸槭裁催€是提示沒有這個(gè)注解類呢?
于是 mvn clean、ide清緩存索引等等一波操作后,仍是無果....
2.發(fā)現(xiàn)問題點(diǎn)
后來看了一下項(xiàng)目配置,看了一下這里面的依賴,好家伙,作用域scope居然是test...
那為什么作用域會(huì)是測(cè)試階段的呢?
3.查看依賴關(guān)系
那就看看到底是從哪里引入進(jìn)來的
通過依賴分析工具,查到原來是從 spring-boot-starter-test 引入進(jìn)來的,而項(xiàng)目中這個(gè)依賴的作用域確實(shí)是 test
那問題來了,為什么之前的項(xiàng)目就可以的呢?不過這個(gè) jakarta 包不應(yīng)該是從測(cè)試依賴導(dǎo)入進(jìn)來的?。?/p>
4.對(duì)比分析
于是對(duì)比了一下之前運(yùn)行正常的項(xiàng)目,看看這個(gè) jakarta 包是如何正常引入進(jìn)來運(yùn)行的。
好家伙,原來是從 spring-boot-starter-web 引入進(jìn)來的,同時(shí)也看看其他的幾個(gè) jakarta 包。
真的不看不知道,平常真沒怎么注意到這里面的依賴學(xué)問,因?yàn)樽詮挠昧?springboot 的 starter ,就真的很少關(guān)注到這些問題。
三、解決問題
要調(diào)整的這個(gè)項(xiàng)目里面因?yàn)槭且虺蒵ar包給其他項(xiàng)目使用,所以我就不想引入太多依賴包,就沒有引入 starter,只是單純的引入了 spring-web 這個(gè)包,但是這里面并沒有 jakarta 依賴,而剛好項(xiàng)目里面又引入了一些單元測(cè)試用的依賴,所以陰差陽錯(cuò)就將 jakarta 以 test 作用域引入進(jìn)來了...
所以,最終還是要引入 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 的一部分作為擴(kuò)展模塊。要在 Java 17 中使用 Java EE 的功能,你需要在項(xiàng)目的 pom.xml 文件中添加相應(yīng)的依賴
到此這篇關(guān)于springboot3.x中Jakarta包無法引入的問題的文章就介紹到這了,更多相關(guān)springboot Jakarta包無法引入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot靜態(tài)方法獲取bean的三種方式
本文主要介紹了詳解SpringBoot靜態(tài)方法獲取bean的三種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10SpringBoot集成ENC對(duì)配置文件進(jìn)行加密的流程步驟
Spring Boot Encoder,即Spring Boot加密模塊,它提供了一種簡單的方式來集成安全編碼功能到Spring Boot應(yīng)用程序中,它是Spring Security框架的一部分,旨在幫助開發(fā)者輕松地處理數(shù)據(jù)加密,本文給大家介紹了SpringBoot集成ENC對(duì)配置文件進(jìn)行加密的流程步驟2024-12-12Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用
這篇文章主要介紹了Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09在Java中實(shí)現(xiàn)線程安全的單例模式的常見方式
單例模式是一種常用的軟件設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn),在多線程環(huán)境下,確保單例模式的線程安全性是非常重要的,因?yàn)槎鄠€(gè)線程可能會(huì)同時(shí)嘗試創(chuàng)建實(shí)例,導(dǎo)致實(shí)例不唯一的問題,本文介紹了在Java中實(shí)現(xiàn)線程安全的單例模式有幾種常見的方式2024-09-09springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建)
這篇文章主要介紹了springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建),需要的朋友可以參考下2020-08-08