依赖范围(5.1)

       首先需要知道,Maven在编译项目主代码(src/main/java目录下面打代码)的时候需要使用一套classpath(使用mvn compile编译src/main/java目录的下面的java文件)。在上例中,编译项目主代码的时候需要用到spring-core,该文件以依赖的方式被引入到classpath中。

      其次,Maven在执行测试(实际上在执行测试的时候也会先执行编译命令)的时候会使用另外一套classpath(使用mvn test会编译src/main/java和src/test/java目录下面的java文件并执行src/test/java下面的测试类)。上例中的JUnit就是一个很好的例子,该文件也以依赖的方式引入到测试使用的classpath中,不同的是这里的依赖范围是test。

       最后,实际运行Maven项目的时候,又会使用一套classpath(java命令运行jar),上例中的spring-core需要在该classpath中,而JUnit则不需要。

   

      依赖范围就是用来控制依赖与这三种classpath(编译classpath,测试classpath,运行classpath)的关系。Maven有一下几种依赖范围:

      1.compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译,测试,运行三种classpath都有效。spring-core,在编译,测试和运行的时候都需要使用该依赖。

      2.test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。

      3.provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要改依赖,但在运行时候,由于容器已经提供,就不需要Maven重复地引入一遍。

      4.runtime:

      5.system:

      

 

猜你喜欢

转载自weigang-gao.iteye.com/blog/2158188