maven - 提供的范围版本如何在 Maven 中工作

标签 maven

我知道当为任何 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/

相关文章:

java - Maven:如何在两个不同的模块下拥有同名的模块?

java - Maven 和代码指标 : check for existence of a test case for each class

java - Dockerizing 使用 oracle-ojdbc : How do you get the driver in there? 的 Maven 应用程序

java - 如何在 Maven 中指定不同版本的 Standard DocLet?

java - 如何通过依赖未声明其依赖项的项目一次过渡到 gradle/maven 一个项目

Spring初始化在项目外完成

google-app-engine - Appengine 框架未运行

IntelliJ IDEA 中的 Maven 和 JavaFX 项目

java - 从命令行覆盖运行时使用的依赖项版本

java - HtmlUnit 测试失败示例