關(guān)于maven配置項目一直提示程序包不存在以及scope的坑
maven配置項目一直提示程序包不存在及scope的坑
今天 ,打包項目的時候,一直提示

wtf?之前一直行的呀,一直都沒問題的,今天難道這么倒霉?
于是我去檢查maven依賴,沒毛病啊,資源庫和項目都有啊
1.我檢查過,maven依賴?yán)锩媸怯羞@個包的,資源庫和項目都有

2.項目/.setting 配置也檢查過,沒有更改過。
3.這些都有檢查過,有都有添加maven 依賴的,jdk1.7,1.8試過都不行。

然后我上去查查stackoverflow,翻了很說是jdk啊,spring掃描的問題,于是我又改了一下
4.一開始我懷疑是版本問題不兼容問題,可是我都試過都升為最新版和對應(yīng)的版本都不行。
5.spring 掃描,我掃描了整個項目,還是不行。
面如死灰之際,我請教了一下主管,主管一看有junit,就馬上問:“看看pom.xml 里面的scope是什么?”
我:scope?什么鬼,能吃嗎?
我一看,很正常啊,沒毛病啊。我還得意洋洋的說,我還是復(fù)制mvn資源庫的,絕對沒打錯。
主管:。。。。。。。。。。。

原來,scope是用于配置打包的jar包配置,有幾個可選參數(shù)
compile,test,system,provided等,默認(rèn)是compile,所以,一般不配置scope也是可以在項目編譯打包的時候把jar包打進(jìn)去的。
compile
默認(rèn)就是compile,什么都不配置也就是意味著compile。
compile表示被依賴項目需要參與當(dāng)前項目的編譯,當(dāng)然后續(xù)的測試,運(yùn)行周期也參與其中,是一個比較強(qiáng)的依賴。
打包的時候通常需要包含進(jìn)去。
test
scope為test表示依賴項目僅僅參與測試相關(guān)的工作,包括測試代碼的編譯,執(zhí)行。
比較典型的如junit。
runntime
runntime表示被依賴項目無需參與項目的編譯,不過后期的測試和運(yùn)行周期需要其參與。
與compile相比,跳過編譯而已,說實(shí)話在終端的項目(非開源,企業(yè)內(nèi)部系統(tǒng))中,和compile區(qū)別不是很大。
比較常見的如JSR×××的實(shí)現(xiàn),對應(yīng)的API jar是compile的,具體實(shí)現(xiàn)是runtime的,compile只需要知道接口就足夠了。
oracle jdbc驅(qū)動架包就是一個很好的例子,一般scope為runntime。
另外runntime的依賴通常和optional搭配使用,optional為true。
我可以用A實(shí)現(xiàn),也可以用B實(shí)現(xiàn)。
provided
provided意味著打包的時候可以不用包進(jìn)去,別的設(shè)施(Web Container)會提供。
事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測試,運(yùn)行等周期。
相當(dāng)于compile,但是在打包階段做了exclude的動作。
system
從參與度來說,也provided相同,不過被依賴項不會從maven倉庫抓,而是從本地文件系統(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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java底層基于二叉搜索樹實(shí)現(xiàn)集合和映射/集合Set功能詳解
這篇文章主要介紹了Java底層基于二叉搜索樹實(shí)現(xiàn)集合和映射/集合Set功能,結(jié)合實(shí)例形式分析了Java使用二叉搜索樹實(shí)現(xiàn)集合和映射相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
解決Java中由于數(shù)據(jù)太大自動轉(zhuǎn)換成科學(xué)計數(shù)法的問題
今天小編就為大家分享一篇解決Java中由于數(shù)據(jù)太大自動轉(zhuǎn)換成科學(xué)計數(shù)法的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理分析
這篇文章主要介紹了spring-boot-maven-plugin插件打包和java -jar命令執(zhí)行原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
Java中extends與implements解析:繼承與接口實(shí)現(xiàn)的本質(zhì)區(qū)別
在Java面向?qū)ο缶幊讨?extends和implements是兩個核心關(guān)鍵字,它們分別用于實(shí)現(xiàn)類繼承和接口實(shí)現(xiàn),本文將深入剖析這兩個關(guān)鍵字的異同點(diǎn),并通過典型應(yīng)用場景和代碼示例幫助開發(fā)者掌握它們的正確使用方式,感興趣的朋友一起看看吧2025-09-09
JAVA中NIO的技術(shù)原理及SpringBoot代碼實(shí)例詳解
Java NIO(Non-blocking I/O)是Java1.4引入的非阻塞I/O API,通過Channel、Buffer和Selector實(shí)現(xiàn)高效、低延遲的異步文件傳輸,適用于高并發(fā)服務(wù)器端場景,本文給大家介紹JAVA中NIO的技術(shù)原理及SpringBoot代碼實(shí)例,感興趣的朋友一起看看吧2025-10-10

