1.依赖的配置
<dependencies> <dependency> <groupId>com.iteye.xujava</groupId> <artifactId>project name</artifactId> <version>1.0.0</version> <!-- 前三个为依赖的基本坐标 --> <type><!-- 依赖的类型 ,对应项目坐标定义的packaging,默认为jar --></type> <scope><!-- 依赖范围 --></scope> <optional><!-- 标记依赖是否可选 --></optional> <exclusions><!-- 用来排除传递性依赖 --> <exclusion> </exclusion> </exclusions> </dependency> <dependencies>
2.依赖的范围
compile:编译依赖范围
test:测试依赖范围
provided:已提供依赖范围,对于编译和测试有效,但在运行时无效,典型例子servlet-api,编译和测试时需要,运行时,容器已提供。
runtime:运行时依赖范围,典型例子是JDBC驱动。
system:系统依赖范围,和provided依赖范围一致。但使用system依赖时必须通过systemPath元素显示地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植。systemPath元素可以引用环境变量,如:
<dependency> <groupId>javax.sql</groupId> <artifactId>jdbc-stdext</artifactId> <version>2.0</version> <scope>system</scope> <systemPath>${java.home}/lib/rt.jar</systemPath> </dependency>
import:导入依赖范围,该依赖范围不会对三种classpath产生实际的影响。
3.传递性依赖
compile | test | provided | runtime | |
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
4.依赖调解
5.可选依赖,可选依赖不被传递
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.10</version> <optional>true</optional> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.4-701.jdbc3</version> <optional>true</optional> </dependency> </dependencies>
6.排除传递性依赖,如test1依赖于test2的1.0.0版,而工程想引入test2的1.1.0版
<dependencies> <dependency> <groupId>com.iteye.xujava</groupId> <artifactId>test1</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>com.iteye.xujava</groupId> <artifactId>test2</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.iteye.xujava</groupId> <artifactId>test2</artifactId> <version>1.1.0</version> </dependency> </dependencies>
7.归类依赖,即定义常量,避免重复。如下面POM中Spring的版本号
<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.iteye.xujava</groupId> <artifactId>account-email</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>account-email</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <springframework.version>2.5.6</springframework.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>com.icegreen</groupId> <artifactId>greenmail</artifactId> <version>1.3.1b</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> </project>
8.优化依赖
mvn dependency:list
E:\mavenspace\account-email>mvn dependency:list [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building account-email 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.1:list (default-cli) @ account-email --- [INFO] [INFO] The following files have been resolved: [INFO] aopalliance:aopalliance:jar:1.0:compile [INFO] com.icegreen:greenmail:jar:1.3.1b:test [INFO] commons-logging:commons-logging:jar:1.1.1:compile [INFO] javax.activation:activation:jar:1.1:compile [INFO] javax.mail:mail:jar:1.4.1:compile [INFO] junit:junit:jar:4.9:test [INFO] org.hamcrest:hamcrest-core:jar:1.1:test [INFO] org.slf4j:slf4j-api:jar:1.3.1:test [INFO] org.springframework:spring-beans:jar:2.5.6:compile [INFO] org.springframework:spring-context:jar:2.5.6:compile [INFO] org.springframework:spring-context-support:jar:2.5.6:compile [INFO] org.springframework:spring-core:jar:2.5.6:compile [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.079s [INFO] Finished at: Sat Jun 15 20:24:06 CST 2013 [INFO] Final Memory: 7M/107M [INFO] ------------------------------------------------------------------------
mvn dependency:tree
E:\mavenspace\account-email>mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building account-email 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ account-email --- [INFO] com.iteye.xujava:account-email:jar:1.0.0 [INFO] +- org.springframework:spring-core:jar:2.5.6:compile [INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile [INFO] +- org.springframework:spring-beans:jar:2.5.6:compile [INFO] +- org.springframework:spring-context:jar:2.5.6:compile [INFO] | \- aopalliance:aopalliance:jar:1.0:compile [INFO] +- org.springframework:spring-context-support:jar:2.5.6:compile [INFO] +- javax.mail:mail:jar:1.4.1:compile [INFO] | \- javax.activation:activation:jar:1.1:compile [INFO] +- com.icegreen:greenmail:jar:1.3.1b:test [INFO] | \- org.slf4j:slf4j-api:jar:1.3.1:test [INFO] \- junit:junit:jar:4.9:test [INFO] \- org.hamcrest:hamcrest-core:jar:1.1:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.185s [INFO] Finished at: Sat Jun 15 20:25:16 CST 2013 [INFO] Final Memory: 7M/107M [INFO] ------------------------------------------------------------------------
mvn dependency:analyze
E:\mavenspace\account-email>mvn dependency:analyze [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building account-email 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] >>> maven-dependency-plugin:2.1:analyze (default-cli) @ account-email >>> [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ account-em ail --- [debug] execute contextualize [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ account-email --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ ac count-email --- [debug] execute contextualize [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory E:\mavenspace\account-email\src\test\ resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ accou nt-email --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< maven-dependency-plugin:2.1:analyze (default-cli) @ account-email <<< [INFO] [INFO] --- maven-dependency-plugin:2.1:analyze (default-cli) @ account-email --- [WARNING] Unused declared dependencies found: [WARNING] org.springframework:spring-core:jar:2.5.6:compile [WARNING] org.springframework:spring-beans:jar:2.5.6:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.150s [INFO] Finished at: Sat Jun 15 20:25:53 CST 2013 [INFO] Final Memory: 8M/107M [INFO] ------------------------------------------------------------------------