pom.xml中<dependency>下的<scope>是什么?

看文档http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html ,我们可以看到<dependency>下的<dependency> <scope>标签

那是什么,我们如何使用它来进行testing?

<scope>元素可以有6个值: 编译提供运行时testing系统导入

该范围用于限制依赖关系的传递性,也影响用于各种构build任务的类path。

这是默认范围,如果没有指定,则使用该范围。 编译依赖关系在项目的所有类path中都可用。 而且,这些依赖关系被传播到依赖项目。

提供

这非常类似于编译,但是表示您希望JDK或容器在运行时提供依赖关系。 例如,在为Java Enterprise Edition构buildWeb应用程序时,可以将Servlet API和相关Java EE API的依赖性设置为提供的范围,因为Web容器提供了这些类。 此作用域仅在编译和testing类path中可用,不可传递。

运行

这个范围表示依赖不是编译所必需的,而是为了执行。 它在运行时和testing类path中,而不是在编译类path中。

testing

此范围表示依赖项对于应用程序的正常使用不是必需的,仅适用于testing编译和执行阶段。

系统

这个范围与提供的范围相似,除了必须提供明确包含它的JAR。 工件始终可用,不会在存储库中查找。

导入 (仅在Maven 2.0.9或更高版本中可用)

这个范围只用于段中的typespom的依赖。 它表示指定的POM应该replace为该POM的部分中的依赖关系。 由于它们被replace,因此具有导入范围的依赖关系实际上并不参与限制依赖关系的传递性。

回答你的问题的第二部分:

我们如何使用它来进行testing?

请注意, test范围只允许在testing阶段使用依赖关系。

阅读文档的全部细节。

范围标签总是用来限制jar类在类path级别上的传递依赖和可用性。如果我们不提供任何范围,那么默认范围将工作,即编译

如果我们没有提供任何范围,那么默认的范围是编译的。如果你想确认,只需在eclipse编辑器中selectEffective pom选项卡,它就会显示为编译。

单行的六个依赖范围:

  • 编译 :默认
  • 提供 :由JDK或运行时的容器提供
  • 运行时 :不需要编译
  • testing :仅在testing期间使用
  • 系统 :在本地提供
  • 导入 :仅在Maven 2.0.9或更高版本中可用