从Maven2 开始,Maven可以自动管理Java应用所引用的开发包(Jar包),原文为transitive dependency (可传递的依赖管理),也就是说Java应用只需要定义其直接引用的Jar包依赖,而无需定义Java应用所引用的所有Jar 依赖。Maven 2可以自动添加Java应用直接引用库所依赖的其它Jar包。
这里我们可以下载hibernate 的一个示例,可以从http://www.hibernate.org/下载,也可以从本站下载.
使用Eclipse –>Import-> Existing Maven Project 打开这个Maven Project。
打开hibernate-tutorials/pom.xml 其dependency 部分定义如下:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.6.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.2.145</version>
<scope>compile</scope>
</dependency>
</dependencies>
而实际引用到的所有Jar包的层次如下:
可以看到hibernate-core 又引用了不少其它Jar,这些Maven都可以自动计算出并下载所需依赖。而无需再pom.xml 中一一列出。
在定义dependency时还可以指定其引用的scope,比如有些引用可能只是用在单元测试而不会添加到最终发布的jar包中。Maven支持下面几种Scope:
- compile: 缺省Scope,应用到Maven所有阶段。
- provided: 只在编译代码时需要,而无需发布到最终Jar包中。
- runtime: 只在运行时需要,比如JDBC驱动。
- test: 只在编译和运行单元测试时需要,比如Juint测试。