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

TDH*_*DHM 168 pom.xml maven

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

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

Ort*_*kni 244

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

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

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

提供

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

运行

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

测试

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

系统

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

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

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

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

我们怎样才能用它来运行测试?

请注意,test作用域仅允许在测试阶段使用依赖项.

阅读文档以获取完整详细信息.

  • 如果编译和运行时需要依赖项怎么办? (2认同)
  • @ennth你会因为不必要的依赖而使你的jar变得臃肿。您可以考虑仅在测试场景中拥有依赖项的情况(例如mockito)。无需将其包含在编译的 jar 中。 (2认同)

vaq*_*han 14

添加了解释范围的好图像

在此输入图像描述

在此输入图像描述


Pre*_*raj 11

六个依赖范围单行:

  • 编译:默认
  • 提供:由JDK或运行时的容器提供
  • 运行时:编译不需要
  • test:仅在测试期间使用
  • system:在本地提供
  • import:仅在Maven 2.0.9或更高版本中可用


Muk*_*esh 5

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

编译意味着您需要 JAR 来编译和运行应用程序。以 Web 应用程序为例,JAR 将放置在该WEB-INF/lib目录中。提供意味着您需要 JAR 来编译,但在运行时环境已经提供了 JAR,因此您不需要将其与应用程序打包在一起。对于 Web 应用程序,这意味着 JAR 文件不会放入该WEB-INF/lib目录中。对于 Web 应用程序,如果应用程序服务器已提供 JAR(或其功能),则使用“提供”,否则使用“编译”。

  • 编译意味着您需要 JAR 来编译和运行应用程序。以 Web 应用程序为例,JAR 将放置在 WEB-INF/lib 目录中。提供意味着您需要 JAR 来编译,但在运行时环境已经提供了 JAR,因此您不需要将其与应用程序打包在一起。对于 Web 应用程序,这意味着 JAR 文件不会放置在 WEB-INF/lib 目录中。对于 Web 应用程序,如果应用程序服务器已提供 JAR(或其功能),则使用“提供”,否则使用“编译”。 (11认同)