關(guān)于maven配置項(xiàng)目一直提示程序包不存在以及scope的坑
maven配置項(xiàng)目一直提示程序包不存在及scope的坑
今天 ,打包項(xiàng)目的時(shí)候,一直提示
wtf?之前一直行的呀,一直都沒(méi)問(wèn)題的,今天難道這么倒霉?
于是我去檢查maven依賴,沒(méi)毛病啊,資源庫(kù)和項(xiàng)目都有啊
1.我檢查過(guò),maven依賴?yán)锩媸怯羞@個(gè)包的,資源庫(kù)和項(xiàng)目都有
2.項(xiàng)目/.setting 配置也檢查過(guò),沒(méi)有更改過(guò)。
3.這些都有檢查過(guò),有都有添加maven 依賴的,jdk1.7,1.8試過(guò)都不行。
然后我上去查查stackoverflow,翻了很說(shuō)是jdk啊,spring掃描的問(wèn)題,于是我又改了一下
4.一開(kāi)始我懷疑是版本問(wèn)題不兼容問(wèn)題,可是我都試過(guò)都升為最新版和對(duì)應(yīng)的版本都不行。
5.spring 掃描,我掃描了整個(gè)項(xiàng)目,還是不行。
面如死灰之際,我請(qǐng)教了一下主管,主管一看有junit,就馬上問(wèn):“看看pom.xml 里面的scope是什么?”
我:scope?什么鬼,能吃嗎?
我一看,很正常啊,沒(méi)毛病啊。我還得意洋洋的說(shuō),我還是復(fù)制mvn資源庫(kù)的,絕對(duì)沒(méi)打錯(cuò)。
主管:。。。。。。。。。。。
原來(lái),scope是用于配置打包的jar包配置,有幾個(gè)可選參數(shù)
compile,test,system,provided等,默認(rèn)是compile,所以,一般不配置scope也是可以在項(xiàng)目編譯打包的時(shí)候把jar包打進(jìn)去的。
compile
默認(rèn)就是compile,什么都不配置也就是意味著compile。
compile表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,當(dāng)然后續(xù)的測(cè)試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。
打包的時(shí)候通常需要包含進(jìn)去。
test
scope為test表示依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯,執(zhí)行。
比較典型的如junit。
runntime
runntime表示被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯,不過(guò)后期的測(cè)試和運(yùn)行周期需要其參與。
與compile相比,跳過(guò)編譯而已,說(shuō)實(shí)話在終端的項(xiàng)目(非開(kāi)源,企業(yè)內(nèi)部系統(tǒng))中,和compile區(qū)別不是很大。
比較常見(jiàn)的如JSR×××的實(shí)現(xiàn),對(duì)應(yīng)的API jar是compile的,具體實(shí)現(xiàn)是runtime的,compile只需要知道接口就足夠了。
oracle jdbc驅(qū)動(dòng)架包就是一個(gè)很好的例子,一般scope為runntime。
另外runntime的依賴通常和optional搭配使用,optional為true。
我可以用A實(shí)現(xiàn),也可以用B實(shí)現(xiàn)。
provided
provided意味著打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施(Web Container)會(huì)提供。
事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測(cè)試,運(yùn)行等周期。
相當(dāng)于compile,但是在打包階段做了exclude的動(dòng)作。
system
從參與度來(lái)說(shuō),也provided相同,不過(guò)被依賴項(xiàng)不會(huì)從maven倉(cāng)庫(kù)抓,而是從本地文件系統(tǒng)拿,一定需要配合systemPath屬性使用。
解決方式
test的框架參與編譯,但是生成的jar包不放到上線的war包里面。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version> 3.2.4.RELEASE </version> <scope>provided</scope> </dependency>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java計(jì)算兩個(gè)漢字相似度的實(shí)現(xiàn)方法
有時(shí)候我們希望計(jì)算兩個(gè)漢字的相似度,比如文本的 OCR 等場(chǎng)景,用于識(shí)別糾正,本文給大家詳細(xì)介紹了Java計(jì)算兩個(gè)漢字相似度的實(shí)現(xiàn)方法,文中有詳細(xì)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-11-11Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(3)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解
這篇文章主要介紹了Spring內(nèi)置定時(shí)任務(wù)調(diào)度@Scheduled使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能詳解
這篇文章主要介紹了Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能,較為詳細(xì)的描述了建造者模式的概念、原理并結(jié)合實(shí)例形式分析了Java使用建造者模式實(shí)現(xiàn)的辦理手機(jī)套餐功能具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-05-05關(guān)于BigDecimal類(lèi)型之間比較問(wèn)題
這篇文章主要介紹了關(guān)于BigDecimal類(lèi)型之間比較問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Spring Boot 實(shí)例代碼之通過(guò)接口安全退出
這篇文章主要介紹了Spring Boot 實(shí)例代碼之通過(guò)接口安全退出的相關(guān)資料,需要的朋友可以參考下2017-09-09Java數(shù)據(jù)結(jié)構(gòu)之散列表詳解
散列表(Hash table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。本文將為大家具體介紹一下散列表的原理及其代碼實(shí)現(xiàn)2022-01-01