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

时间:2016-04-25 21:39:03

标签: java maven jdbc scope

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

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

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

提前致谢,

1 个答案:

答案 0 :(得分:2)

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

为什么不runtime?我们来看看Maven文档:

<强>提供

  

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

<强>运行时

  

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

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

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