第4章 maven依賴特性
本章詳細介紹maven的依賴特性和依賴范圍,如何排除依賴。
4.1 什么是依賴傳遞
舉個例子
在非maven項目中,你需要使用spring功能,你會想到導入spring的jar包,那么,srping又需要其他依賴jar包支持,所以你又需要去導入其他jar包,多次反復嘗試啟動項目后,你終于成功了!
maven項目就不需要這么麻煩,你只要在pom.xml文件中,引入spring相關配置,那么他會自動引入其他依賴jar包,這就是maven的依賴傳遞。
以下是一個配置文件,僅引入了spring和junit兩個依賴配置,但maven已自動導入了其他的jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.group</groupId><artifactId>simple</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>simple</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><org.springframework-version>3.1.0.RELEASE</org.springframework-version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>
4.2 依賴特性的特點
4.2.1 依賴范圍
什么是依賴范圍?
依賴范圍指:決定依賴特性在構建的哪個階段起作用。
舉個例子,我需要做junit測試,所以需要引入junit相關jar,但我在發布項目時,我又不需要這個jar,所以(你有這個需求,maven肯定有這個解決辦法),在配置時,需要指定依賴的范圍。
在配置依賴時,scope標簽就是用來規范依賴范圍。
范圍 | 描述 |
---|---|
compile | 默認值,適用于所有階段,會隨著項目一起發布。 |
provided | 類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。 |
runtime | 只在運行時使用,如JDBC驅動,適用運行和測試階段。 |
test | 只在測試時使用,用于編譯和運行測試代碼。不會隨項目發布。 |
system | 類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。 |
4.2.2 排除依賴
因為maven的依賴傳遞特性,所以很有可能一些你不需要的依賴也會包含在工程類路徑中,為了解決這種情況,maven已經引入了依賴排除概念。
1.
如何使用排除依賴
在pom.xml文件中,<dependency>
標簽中加上<exclusions>
標簽
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.5.1</version><exclusions><exclusion><groupId>tomcat</groupId><artifactId>jasper-runtime</artifactId></exclusion><exclusion><groupId>tomcat</groupId><artifactId>jasper-compiler</artifactId></exclusion></exclusions>
</dependency>
例如以上代碼,在使用hadoop-common時,排除掉jasper-runtime, jasper-compiler兩個依賴jar。
2.
使用通配符進行依賴排除
有的時候,依賴過多,我們不需要一個個的去排除,可使用通配符來實現
<dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-core</artifactId><version>4.5.0-HBase-1.0</version><exclusions><exclusion><groupId>org.mortbay.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
</dependency>
例如以上代碼,排除groupId 是org.mortbay.jetty的所有jar包。
首頁傳送門
版權聲明:本文為博主原創文章,未經博主允許不得轉載。