對於從事數據科學和人工智慧領域的人們來說,Python 是大家的首選編程語言。根據最近的一項調查,27% 的程式員開發職位要 求掌握 Python 語言,今年年初這一數字還只是 18.5%。 Python 流行的原因在於其擁有非常直觀的能力:這門語言擁有大量的庫、足夠高的生產效率,還相對易於學習。2 ...
轉自:
http://www.java265.com/Maven/202204/3219.html
下文筆者講述maven依賴範圍的簡介說明maven依賴範圍簡介
在maven依賴時,其坐標後面跟上scope裡面的值 我們稱之為依賴範圍: 它用於控制依賴,編譯,測試,運行 依賴範圍scope 用來控制依賴和編譯,測試,運行的classpath的關係。具體的依賴範圍有如下6種:
依賴範圍 | 備註說明 |
compile | 預設編譯依賴範圍,對於編譯,測試,運行三種classpath都有效 |
test | 測試依賴範圍,只對於測試classpath有效 |
provided | 已提供依賴範圍,對於編譯,測試的classpath都有效,但對於運行無效。因為由容器已經提供,如servlet-api |
runtime | 運行時提供,如:jdbc驅動 |
system | 系統範圍,自定義構件,指定systemPath;跟provided 相似,但是在系統中要以外部JAR包的形式提供,maven不會在repository查找它 |
import | 只使用在<dependencyManagement>中,指從其它的pom中導入dependency的配置 |
傳遞性依賴
如: C依賴B B依賴A 則稱C對B是第一直接依賴,B對A是第二直接依賴,C對A是傳遞依賴
可選依賴
在依賴節點dependency中 <optional>屬性 可控制當前的依賴是否向下傳遞 預設值為false,表示向下傳遞例:A項目依賴於log4j,B項目依賴於A項目 如果在A中對log4j依賴的optional配置成false時 B項目中自動傳遞依賴於log4j。否則反之。
項目A配置slf4j的依賴並設置optional為true <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> <!-- 配置為true時不向下傳遞此依賴,預設為false --> <optional>true</optional> </dependency> 配置項目B依賴於項目A,檢查項目B的依賴包 <!-- 依賴於A --> <dependency> <groupId>com.yiidian</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> 此時可以看出B項目沒有依賴slf4j-log4j12
依賴衝突
當一個jar在直接或間接依賴同一坐標的不同版本的資源時,此時以就近原則依賴指定jar包 如:A-->B-->C-->D-->X(1.9) A-->D-->X(2.0) 1.根據就近原則,此時A會依賴X的2.0版本 2.當依賴中存在兩個相同的坐標時,則以順序下方的版本為準例:
當一個pom.xml引入兩個相同的jar時,此時會 引入3.5.8的mybatis
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.8</version> </dependency>
排除依賴
在pom中的依賴節點中 當引入的依賴包含了很多其它的傳遞依賴 同此時項目中依賴的jar包不符,此時我們需排除這些依賴,該如何操作呢? 下文筆者將一一道來,如下所示: 使用 <exclusions> 然後再添加 <exclusion>可排除指定的jar例:
使用exclusion排除spring-plugin中的spring-core依賴
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>3.2.23.1</version> <exclusions> <!-- 排除spring-core的傳遞依賴 --> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.0.RELEASE</version> </dependency>