1 . 坐标
maven 的所有构件均通过坐标进行组织和管理。maven 的坐标通过 5 个元素进行定义,其中 groupId、artifactId、version 是必须的,packaging 是可选的(默认为jar),classifier 是不能直接定义的。
2 . 依赖
使用 Maven 可以方便的管理依赖,如下是一段在 pom.xml 文件中声明依赖的代码示例:
1 <dependencies> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-test</artifactId> 5 <version>3.2.0.RELEASE</version> 6 <type>jar</type> 7 <scope>test</scope> 8 <systemPath>${java.home}/lib/rt.jar</systemPath> 9 <optional>false</optional> 10 <exclusions> 11 <exclusion></exclusion> 12 </exclusions> 13 </dependency> 14 </dependencies>
2 . 1 . 依赖范围
执行不同的 Maven 命令(mvn package,mvn test,mvn install ……),会使用不同的 classpath,Maven 对应的有三套 classpath:编译classpath、测试classpath,运行classpath。scope 选项的值,决定了该依赖构件会被引入到哪一个 classpath 中。
2 . 2 . 依赖传递
如上图所示,hibernate-core 依赖 hibernate-commons-annotations ,而 hibernate-commons-annotations 又依赖 slf4j-api ,hibernate-core 对 slf4j-api 的依赖就是传递依赖。我们只需要引入 hibernate-core 构件的依赖,不用考虑它还有其它的依赖, 也不用担心会引入多余或冲突的依赖,Maven 会自动为我们引入依赖及传递依赖。
2 . 3 . 依赖传递和依赖范围
如上图 2.2 所示,几种依赖关系分别叫做第一直接依赖、第二直接依赖和传递性依赖,其中第一直接依赖和第二直接依赖的依赖范围,决定了传递性依赖的依赖范围。
2 . 4 . 依赖冲突
通常我们不需要关心传递性依赖,当多个传递性依赖中有对同一构件不同版本的依赖时,如何解决呢?
2 . 5 . 依赖排除
针对依赖冲突中的“短路径优先”,如果我们想使用长路径的依赖怎么办呢?这时可以使用依赖排除 <exclusions> 元素,显示排除短路径依赖。在非冲突的情况下,这种方法同样有效。
2 . 6 . 依赖归类
通常在项目中,我们会同时依赖同一个构件的不同模块,如 spring-orm-3.2.0,spring-context-3.2.0,且多个模块版本相同,为了维护和升级方便,我们可以对其同一管理,这时可以使用到 Maven 属性,类似于变量的概念。
1 <properties> 2 <springframework.version>3.2.0.RELEASE</springframework.version> 3 </properties> 4 5 <dependencies> 6 <dependency> 7 <groupId>org.springframework</groupId> 8 <artifactId>spring-orm</artifactId> 9 <version>${springframework.version}</version> 10 </dependency> 11 <dependency> 12 <groupId>org.springframework</groupId> 13 <artifactId>spring-context</artifactId> 14 <version>${springframework.version}</version> 15 </dependency> 16 </dependencies>
Maven 系列 三 :坐标和依赖,布布扣,bubuko.com
原文:http://www.cnblogs.com/luotaoyeah/p/3784901.html