dependency标签
原文地址:https://blog.csdn.net/sinat_32034679/article/details/69517838
在一個maven項目中,依賴是十分重要的一部分,所以單獨列出一個章節來說明。?
在pom.xml文件中,project下直接嵌入的是一個<dependencies>標簽,然后里面嵌入若干個<dependency>標簽。?
這是一個常見的dependency標簽:
下面是一個“復雜”的dependency標簽:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version><scope>compile</scope><systemPath>./commons-lang3.jar</systemPath><exclusions><exclusion><artifactId>aopalliance</artifactId><groupId>aopalliance</groupId></exclusion></exclusions><optional>false</optional> </dependency>注意其中紅色的部分:?
<scope>:表明此依賴的作用域。有如下取值:?
compile:默認。表明此依賴在任何時刻都生效。包括編譯、測試、運行。?
test :表明此依賴只在測試時生效。例如junit.jar。最終的打包是不會被包含的。?
provided:表明此依賴在目標環境中已經存在。例如servlet-api.jar,它在tomcat里已經提供了,打包時是不需要打到war文件中的。?
runtime:表示此依賴只在目標環境中運行時才需要,編譯時不需要,例如MySQL-connector.jar等這些數據庫驅動。因為這些依賴是具體的實現,是不會被代碼直接使用的。?
system :表示此依賴是來自外部jar,而不是maven倉庫。當scope設置為此值時,systemPath屬性才會生效,systemPath為一個物理文件路徑,來指定依賴的jar其物理磁盤的位置。
<systemPath>:見scope為system的說明。?
<exclusion>?:用來排除傳遞的依賴。例如project1依賴jarA,jarA 依賴jarB。當引入jarA時,jarB也會被引入(在maven中,這被稱為依賴傳遞<transferdependency>)。在某些情況下如果不想jarB被引入,則可以使用exclusion標簽來進行控制。?
<optional>?:默認值為false。此標簽也是用于控制依賴傳遞的。如果將此值設置為true。則默認情況下此依賴不會被傳遞,除非在引用中顯式引用此依賴。例如project1依賴jarA,jarA 依賴jarB,在jarA中引用jarB時,jarB被標記為optional,此時在project1的依賴中就不會包含jarB,如需使用jarB,需要顯式引用jarB。
總結:以上配置在通常情況下使用頻率為“較頻繁”,所以還是需要掌握的。scope的system是不被maven官方推薦的,所以要慎用。exclusion標簽可以排除傳遞的依賴,這樣可以解決某些依賴沖突。依賴沖突另一種簡單的解決辦法就是將沖突的依賴顯式引用下,這樣maven就會使用指定的這個依賴,而不是自行判斷該使用哪個依賴(其實maven對依賴的管理是采用樹形結構的,樹頂端會”覆蓋”底端的,所以顯式引用某個依賴能夠解決依賴沖突。依賴沖突還有一種較復雜的辦法就是使用dependencyManagement,小伙伴可以自行學習下)。
轉載自?
Dependency依賴
總結
以上是生活随笔為你收集整理的dependency标签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决:Please specify a
- 下一篇: Django的核心思想ORM