maven scope 属性和生命周期
2019獨角獸企業重金招聘Python工程師標準>>>
maven的dependency參數
scope的分類
1.compile:默認值 他表示被依賴項目需要參與當前項目的編譯,還有后續的測試,運行周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去
2.test:依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯和執行,不會被打包,例如:junit
3.runtime:表示被依賴項目無需參與項目的編譯,不過后期的測試和運行周期需要其參與。與compile相比,跳過了編譯而已。例如JDBC驅動,適用運行和測試階段
4.provided:打包的時候可以不用包進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,運行等周期。相當于compile,但是打包階段做了exclude操作
5.system:從參與度來說,和provided相同,不過被依賴項不會從maven倉庫下載,而是從本地文件系統拿。需要添加systemPath的屬性來定義路徑
6.import(only available in Maven 2.0.9 or later):這個是maven2.0.9版本后出的屬性,import只能在dependencyManagement的中使用,能解決maven單繼承問題,import依賴關系實際上并不參與限制依賴關系的傳遞性。
使用import scope解決maven繼承(單)問題
scope的依賴傳遞
A依賴B,B依賴C。當前項目為A,只當B在A項目中的scope,那么c在A中的scope是如何得知呢?
當C是test或者provided時,C直接被丟棄,A不依賴C;(排除傳遞依賴)
否則A依賴C,C的scope繼承與B的scope
Maven的生命周期
clean:有問題,多清理! package:打成Jar or War包,會自動進行clean+compile install:將本地工程Jar上傳到本地倉庫 deploy:上傳到私服關于scope依賴范圍
既然,Maven的生命周期存在編譯、測試、運行這些過程,那么顯然有些依賴只用于測試,比如junit;有些依賴編譯用不到,只有運行的時候才能用到,比如mysql的驅動包在編譯期就用不到(編譯期用的是JDBC接口),而是在運行時用到的;還有些依賴,編譯期要用到,而運行期不需要提供,因為有些容器已經提供了,比如servlet-api在tomcat中已經提供了,我們只需要的是編譯期提供而已。
compile:默認的scope,運行期有效,需要打入包中。 provided:編譯期有效,運行期不需要提供,不會打入包中。 runtime:編譯不需要,在運行期有效,需要導入包中。(接口與實現分離) test:測試需要,不會打入包中。 system:非本地倉庫引入、存在系統的某個路徑下的jar。(一般不使用)?
轉載于:https://my.oschina.net/u/3098425/blog/2870317
總結
以上是生活随笔為你收集整理的maven scope 属性和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精读《REST,GraphQL,Webh
- 下一篇: SpringBoot(七)整合theme