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

时间:2014-11-17 15:17:24

标签: maven pom.xml

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

这是什么以及我们如何使用它来运行测试?

6 个答案:

答案 0 :(得分:220)

<scope>元素可以包含6个值:编译提供运行时测试系统导入

此范围用于限制依赖项的传递性,还用于影响用于各种构建任务的类路径。

  

<强>编译

     

这是默认范围,如果未指定,则使用此范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。

     

<强>提供

     

这很像compile,但表示您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。

     

<强>运行时

     

此范围表示编译不需要依赖项,但是用于执行。它位于运行时和测试类路径中,但不是编译类路径。

     

<强>测试

     

此范围表示正常使用应用程序不需要依赖关系,并且仅适用于测试编译和执行阶段。

     

<强>系统

     

此范围与提供的类似,只是您必须提供明确包含它的JAR。工件始终可用,不会在存储库中查找。

     

导入(仅适用于Maven 2.0.9或更高版本)

     

此范围仅用于部分中pom类型的依赖项。它表示应该用该POM部分中的依赖项替换指定的POM。由于它们被替换,具有导入范围的依赖性实际上并不参与限制依赖的传递性。

回答问题的第二部分:

  

我们如何使用它来运行测试?

请注意,test范围仅允许在测试阶段使用依赖关系。

阅读documentation了解详情。

答案 1 :(得分:8)

单行六个依赖范围:

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

答案 2 :(得分:7)

添加了解释范围的好图像

enter image description here

enter image description here

答案 3 :(得分:3)

范围标记始终用于限制类路径级别的jar的传递依赖性和可用性。如果我们不提供任何范围,则默认范围将起作用,即编译

答案 4 :(得分:0)

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

答案 5 :(得分:0)

.pom dependency scope可以包含:

  • compile-在编译时和运行时可用
  • provided-在编译时可用。 (此依赖关系应由OS之类的外部容器提供)
  • runtime-在运行时可用
  • test-测试编译和运行时间
  • system-与provided类似,但暴露systemPath指向.jar
  • import-可从Maven v2.0.9中用于<type>pom</type>,并且应替换为该文件<dependencyManagement/>中的有效依赖项
相关问题