maven pom.xml下面是什么< scope>< dependency>?

ajsxfq5m  于 2022-12-17  发布在  Maven
关注(0)|答案(4)|浏览(198)

查看文档http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html,我们可以在<dependency>下看到<scope>标记
这是什么?我们如何使用它来运行测试?

1rhkuytd

1rhkuytd1#

<scope>元素可以取6个值:* 编译 提供 运行时 测试 系统 * 和 * 导入 *。
此范围用于限制依赖项的可传递性,并且还影响用于各种生成任务的类路径。

编译

这是默认作用域,在未指定时使用。编译依赖关系在项目的所有类路径中可用。此外,这些依赖关系将传播到依赖项目。

前提是

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

运行时

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

测试

此范围指示应用程序的正常使用不需要依赖项,仅在测试编译和执行阶段可用。

系统

此范围类似于provided,只是您必须提供显式包含它的JAR。该工件始终可用,并且不会在存储库中查找。

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

此作用域仅用于节中类型为pom的依赖项。它表示指定的POM应替换为该POM节中的依赖项。因为它们被替换,所以具有导入作用域的依赖项实际上不参与限制依赖项的传递性。
回答你问题的第二部分:
我们如何使用它来运行测试?
注意,test作用域只允许在测试阶段使用依赖项。
阅读文档了解完整详细信息。

3phpmpom

3phpmpom2#

六个依赖项作用域:

*编译:默认范围,类路径可用于src/mainsrc/test
*测试:类路径可用于src/test
*前提是:与compie类似,但由JDK或容器在运行时提供
*运行时间:编译时不需要,仅在运行时需要
*system:本地提供的类路径
*import:只能导入其他POM到<dependencyManagement/>中,只有Maven 2.0.9以上版本才有,改变父代并不总是可行的,很多项目已经指定了父代项目来管理自己的组织标准,dependencyManagement允许我们添加父代项目而不创建父代,类似于多重继承。

iezvtpos

iezvtpos3#

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

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

62o28rlo

62o28rlo4#

.pomdependencyscope可以包含:

  • compile-在编译时和运行时可用
  • provided-编译时可用。(此依赖关系应由外部容器(如OS...)提供)
  • runtime-在运行时可用
  • test-测试编译和运行时
  • system-类似于provided,但将<systemPath>path/some.jar</systemPath>暴露到.jar上的点
  • import-可从Maven v2.0.9获得,用于<type>pom</type>,应将其替换为来自此文件<dependencyManagement/>的有效依赖项

相关问题