Maven - JDBC jar 文件的正确范围是什么?

gtl*_*wig 5 java scope jdbc maven

对于我的开发站,我需要我的项目来“查看”JDBC 驱动程序。但是当我将项目部署到服务器时,如果 JDBC 驱动程序位于 /lib 文件夹中,它们将导致容器行为异常。

我尝试将<scope>provided</scope>.war 文件设置为我不想打包的驱动程序,但我无法让我的 IDE 运行该项目。

声明 JDBC 驱动程序的正确范围是多少,pom.xml这样它们就不会被打包进行部署,并且我可以在我的开发站上使用它们?<scope>runtime</scope>

提前致谢,

mad*_*ead 5

您的问题的简短答案是:您应该使用provided范围。

为什么不runtime?让我们检查一下 Maven 文档:

假如

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

运行

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

因此,Maven 可能不会runtime在编译的类路径中公开作用域依赖项,因此您将无法直接在代码中使用它们。但是,类似的代码Class.forName("class.from.runtime.Scope")可以编译正常。

我猜问题是你的 IDE 没有捕获pom.xml更改。通常,这个问题可以通过“清理缓存”或“更新”/“同步”项目来解决。以下是如何在EclipseIDEA中执行此操作。

  • OP 说驱动程序位于他的“lib”文件夹中。即它们由容器提供并且不需要将它们包装在可分发的包中。因此,范围应该是“提供”。 (2认同)