maven 之依賴管理
1. 基本配置:
<!-- dependencies 該標簽下可以配置多個依賴 --> <dependencies> <!-- 配置一個依賴 通過gav來配置的--> <dependency> <!-- gav是必須配置的基本坐標 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- type用於指定依賴的類型 默認為jar --> <type>jar</type> <!-- classifier 該元素用來幫助定義構建輸出的一些附屬構件。比如javadoc和sources.jar 。 這是java文檔和源代碼。<classifier></classifier>--> <!-- scope只依賴的範圍 --> <scope>test</scope> </dependency> </dependencies>
1.依賴範圍:
a)Compile 編譯依賴範圍。 如果沒有指定,就會默認使用該依賴範圍。 使用此依賴範圍的Maven依賴, 對於編譯,測試,運行都有效。
b)Test: 測試依賴範圍。 只在測試的時候需要。比如junit
c)Provided: 已提供依賴範圍。 使用此依賴範圍的Maven依賴,對於編譯和測試有效, 但在運行時無效。 典型的例子是servlet-API, 編譯和測試項目的需要, 但在運行項目時, 由於容器已經提供, 就不需要Maven重復地引入一遍。
d)Runtime: 運行時依賴範圍。 使用此依賴範圍的Maven依賴,對於測試和運行有效, 但在編譯代碼時無效。 典型的例子是:jdbc驅動程序, 項目主代碼的編譯只需要jdk提供的jdbc接口,只有在執行測試或者運行項目的時候才需要實現上述接口的具體jdbc驅動。
e)System: 系統依賴範圍。 一般不使用。
2.如何查找要依賴的坐標:
在網站上查詢:http://mvnrepository.com/
也可以從私服的索引上查詢
3.依賴的傳遞性
在maven中,依賴具有傳遞性。
項目A----->log4j
項目B------>項目A,那麽項目B也就依賴了log4j
4.依賴的傳遞性可能造成沖突
項目A------>log4j1.2.9
項目B------->log4j1.2.12
項目B-------->項目A
解決方案:最短路徑優先,項目B最終依賴的是log4j1.2.12
項目A------->log4j1.2.9
項目B------->log4j1.2.12
項目C-------->項目A
項目C--------->項目B
解決方案:誰先聲明使用誰
5.依賴的排除
在jar沖突時,maven可以解決這個問題。但是有時想使用某一個jar,這個時候可以使用依賴排除的方式將不需要的jar包排除
<dependency> <groupId>cn.sxt</groupId> <artifactId>user-mapper</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 依賴的排除 --> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
7.聚合
由於項目可能是由多個模塊組成的,一個一個模塊操作比較麻煩。所以可以統一的設置一個項目來管理。
<groupId>cn.sxt</groupId> <artifactId>user-aggregation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>user-aggregation</name> <modules> <module>../user-vo</module> <module>../user-mapper</module> <module>../user-service</module> </modules>
8 . 繼承
父類的項目為pom
<groupId>cn.sxt</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>user-parent</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <log4j.version>1.2.9</log4j.version> </properties> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies>
子類的配置文件
<parent> <groupId>cn.sxt</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>cn.sxt</groupId> <artifactId>user-vo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>user-vo</name> <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies> </dependencyManagement>
9. web項目開發啊
a)選擇骨架時,選擇webapp
依賴相關的jar包
<dependency> <groupId>cn.sxt</groupId> <artifactId>user-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.3.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
配置tomcat插件
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 端口 -->
<port>8080</port>
<!-- 訪問路徑 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
通過命令:tomcat:tun運行
測試:http://localhost:8080/
maven 之依賴管理