maven中scope


scope maven中scope的默認值是compile
scope的分類
1)compile 默認是compile。compile表示被依賴項目需要參與當前項目的編譯,包括后續的測試,運行周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去。
2)test 表示依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯,執行。比較典型的如junit
3)runtime 表示被依賴項目無需參與項目的編譯,不過后期的測試和運行周期需要其參與。與compile相比,跳過編譯而已。在終端的項目(非開源,企業內部系統)中,和compile區別不是很大。比較常見的如JSRXXX的實現,對應的API jar是compile,具體實現是runtime的,compile只需要知道接口就足夠了。oracle jdbc驅動jar包就是一個很好的例子,一般scope為runtime。 另runtime的依賴通常和optional搭配使用,optional為true。即可以用A實現也可以用B實現。
4)procided 意味着打包的時候可以不用包進去,別的設施(web container)會提供。事實上該依賴理論上可以參與編譯、測試、運行等周期。相當於compile,但是打包階段做了exclude的動作。
5)system 和provide相同,不過被依賴項不會從maven倉庫抓,而是從本地系統文件拿,一定要配合systemPath使用。

當maven依賴本地而非repository中的jar包,sytemPath指明本地jar包路徑
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.5</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath>
</dependency>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>

以上方式可以實現jar包的復制,但沒法實現將依賴放到MANIFEST.MF中

不過不推薦使用system,因為一個項目的pom.xml如果使用了scope為system的depend后,會導致傳遞依賴中斷,即所有其他依賴本項目的項目都無法傳遞依賴了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM