我知道当为任何 Maven 依赖项提供范围定义时,它将由 Web 服务器或运行时环境提供。但不确定 version 在这里有何帮助。
举个例子
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.4</version>
<scope>provided</scope>
</dependency>
在编译时,它将使用 eclipselink 版本 2.6.4,但在运行时会是什么? 在捆绑它时它是完全取决于依赖项的提供者,还是取决于任何其他因素?
如果它完全取决于提供者,那么在提供范围内定义版本的目的是什么? 或者在定义提供的范围版本时,我们应该认识到网络服务器包版本?
最佳答案
版本是为了让Maven知道在打包WAR/JAR/EAR等时编译代码应该使用哪个版本的依赖
提供的范围是让 Maven 知道是否需要将此依赖项包含到 WAR/JAR/EAR 中。如果提供范围,则不包括。否则,包括它。
Maven 不会知道您的运行时环境(即应用程序服务器)中依赖项的版本。开发者有责任手动将pom.xml
中指定的版本与运行时环境的依赖版本进行匹配。否则,您最终可能会遇到应用程序实际上可以在运行时环境中运行的情况,但是由于您在 pom.xml
中指定了旧版本,这导致您无法打包应用程序,因为旧版本版本不包含较新版本中引入的新要素类。
关于maven - 提供的范围版本如何在 Maven 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67139736/