2016-04-25 29 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中做到這一點。