關(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底層基于二叉搜索樹(shù)實(shí)現(xiàn)集合和映射/集合Set功能詳解
這篇文章主要介紹了Java底層基于二叉搜索樹(shù)實(shí)現(xiàn)集合和映射/集合Set功能,結(jié)合實(shí)例形式分析了Java使用二叉搜索樹(shù)實(shí)現(xiàn)集合和映射相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
解決Java中由于數(shù)據(jù)太大自動(dòng)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法的問(wèn)題
今天小編就為大家分享一篇解決Java中由于數(shù)據(jù)太大自動(dòng)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
一篇文章細(xì)數(shù)Java中List的10個(gè)坑
在Java中List是一個(gè)有序集合,允許存儲(chǔ)重復(fù)的元素,它是Java集合框架的一部分,提供了對(duì)集合進(jìn)行各種操作的接口,這篇文章主要介紹了Java中List10個(gè)坑的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理分析
這篇文章主要介紹了spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Java中extends與implements解析:繼承與接口實(shí)現(xiàn)的本質(zhì)區(qū)別
在Java面向?qū)ο缶幊讨?extends和implements是兩個(gè)核心關(guān)鍵字,它們分別用于實(shí)現(xiàn)類繼承和接口實(shí)現(xiàn),本文將深入剖析這兩個(gè)關(guān)鍵字的異同點(diǎn),并通過(guò)典型應(yīng)用場(chǎng)景和代碼示例幫助開(kāi)發(fā)者掌握它們的正確使用方式,感興趣的朋友一起看看吧2025-09-09
基于Quartz定時(shí)調(diào)度任務(wù)(詳解)
下面小編就為大家?guī)?lái)一篇基于Quartz定時(shí)調(diào)度任務(wù)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
JAVA中NIO的技術(shù)原理及SpringBoot代碼實(shí)例詳解
Java NIO(Non-blocking I/O)是Java1.4引入的非阻塞I/O API,通過(guò)Channel、Buffer和Selector實(shí)現(xiàn)高效、低延遲的異步文件傳輸,適用于高并發(fā)服務(wù)器端場(chǎng)景,本文給大家介紹JAVA中NIO的技術(shù)原理及SpringBoot代碼實(shí)例,感興趣的朋友一起看看吧2025-10-10
spring?MVC實(shí)現(xiàn)簡(jiǎn)單登錄功能
這篇文章主要為大家詳細(xì)介紹了spring?MVC實(shí)現(xiàn)簡(jiǎn)單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09

