【问题标题】:Maven - what the correct scope for JDBC jar files?Maven - JDBC jar 文件的正确范围是什么?
【发布时间】:2016-08-19 11:48:28
【问题描述】:

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

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

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

提前致谢,

【问题讨论】:

  • 什么是 IDE?您可能需要告诉 IDE 应用程序使用哪些驱动程序(并正确告诉 pom 这些驱动程序不会被打包 - 即提供)
  • IDE 是 Spring ToolSource

标签: java maven jdbc scope


【解决方案1】:

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

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

提供

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

运行时

这个范围表示依赖不是编译所必需的,而是执行所必需的。它在运行时和测试类路径中,但不在编译类路径中。

因此,Maven 可能不会在 compile 的类路径中公开 runtime 范围的依赖项,因此您将无法直接在代码中使用它们。但是,Class.forName("class.from.runtime.Scope") 这样的代码可以编译成功。

我想问题是你的 IDE 没有抓住pom.xml 的变化。通常,这个问题可以通过“清理缓存”或“更新”/“同步”你的项目来解决。这是在EclipseIDEA 中执行此操作的方法。

【讨论】:

  • 此答案的当前版本与baeldung.com 的意见不同(范围:运行时),如果有人评论此答案,我会很高兴。
  • OP 说驱动程序在他的lib 文件夹中。 IE。它们由容器提供,不需要将它们包装在可分发包中。因此,范围应该是provided
猜你喜欢
  • 2015-01-08
  • 1970-01-01
  • 2012-04-16
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多