maven 配置項目一直提示程序包不存在以及scope的坑

今天 ,打包項目的時候,一直提示


 wtf?之前一直行的呀,一直都沒問題的,今天難道這麼倒黴?

於是我去檢查maven依賴,沒毛病啊,資源庫和項目都有啊

1.我檢查過,maven依賴裏面是有這個包的,資源庫和項目都有


2.項目/.setting 配置也檢查過,沒有更改過。


3.這些都有檢查過,有都有添加maven 依賴的,jdk1.7,1.8試過都不行。



然後我上去查查stackoverflow,翻了很說是jdk啊,spring掃描的問題,於是我又改了一下

4.一開始我懷疑是版本問題不兼容問題,可是我都試過都升爲最新版和對應的版本都不行。

5.spring 掃描,我掃描了整個項目,還是不行。

面如死灰之際,我請教了一下主管,主管一看有junit,就馬上問:“看看pom.xml 裏面的scope是什麼?”

我:scope?什麼鬼,能吃嗎?

我一看,很正常啊,沒毛病啊。我還得意洋洋的說,我還是複製mvn資源庫的,絕對沒打錯。

主管:。。。。。。。。。。。




原來,scope是用於配置打包的jar包配置,有幾個可選參數

compile,test,system,provided等,默認是compile,所以,一般不配置scope也是可以在項目編譯打包的時候把jar包打進去的。

compile

默認就是compile,什麼都不配置也就是意味着compile。compile表示被依賴項目需要參與當前項目的編譯,當然後續的測試,運行週期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。

test

scope爲test表示依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯,執行。比較典型的如junit。

runntime

runntime表示被依賴項目無需參與項目的編譯,不過後期的測試和運行週期需要其參與。與compile相比,跳過編譯而已,說實話在終端的項目(非開源,企業內部系統)中,和compile區別不是很大。比較常見的如JSR×××的實現,對應的API jar是compile的,具體實現是runtime的,compile只需要知道接口就足夠了。oracle jdbc驅動架包就是一個很好的例子,一般scope爲runntime。另外runntime的依賴通常和optional搭配使用,optional爲true。我可以用A實現,也可以用B實現。

provided

provided意味着打包的時候可以不用包進去,別的設施(Web Container)會提供。事實上該依賴理論上可以參與編譯,測試,運行等週期。相當於compile,但是在打包階段做了exclude的動作。

system

從參與度來說,也provided相同,不過被依賴項不會從maven倉庫抓,而是從本地文件系統拿,一定需要配合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>   


參考鏈接:http://blog.csdn.net/kimylrong/article/details/50353161

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章