对于我的开发站,我需要我的项目“看到”JDBC驱动程序。但是当我将项目部署到服务器时,如果JDBC驱动程序位于/ lib文件夹中,它们将导致容器行为异常。
我尝试将<scope>provided</scope>
设置为我不想在.war文件中打包的驱动程序,但是我无法让IDE运行该项目。
在pom.xml
上声明JDBC驱动程序的正确范围是什么,因此它们不会被打包以进行部署,我可以在我的开发工作站上使用它们? <scope>runtime</scope>
?
提前致谢,
答案 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
更改。通常,通过“清理缓存”或“更新”/“同步”您的项目来解决此问题。以下是在Eclipse和IDEA中执行此操作的方法。