2016-04-25 31 views
1

对于我的开发站,我需要我的项目来“查看”JDBC驱动程序。但是,当我将项目部署到服务器时,如果JDBC驱动程序位于/ lib文件夹中,则会导致容器运行异常。Maven - JDBC jar文件的正确范围是什么?

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

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

由于提前,

+0

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

+0

IDE是Spring ToolSource – gtludwig

回答

2

的提问简短的回答是:你应该使用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中做到这一点。