2013-07-16 94 views
3

我需要加載Oracle驅動程序。繼this這裏是我的build.gradle文件:Gradle無法加載Oracle驅動程序

repositories { 
    flatDir name: 'localRepository', dirs: 'lib' 
} 

configurations { 
    driver 
} 

task loadOracle() << { 
    URLClassLoader loader = GroovyObject.class.classLoader 
    configurations.driver.each {File file -> 
     loader.addURL(file.toURL()) 
    } 
    Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver') 
    java.sql.Driver driverInstance = driverClass.newInstance() 
    java.sql.DriverManager.registerDriver(driverInstance) 

// Sql sql = Sql.newInstance('jdbc-url','username','password') 
} 

它給出了這樣的例外:

Execution failed for task ':loadOracle'. 
> java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver 

它抱怨該行的是

Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver') 

看起來它只是不加載lib/ojdbc-14.jar文件。

很多其他人在加載Oracle驅動程序時遇到問題。需要做些什麼?

謝謝。

+0

由於Groovy的類加載器,我在編寫數據庫任務時遇到了同樣的問題。我發現'Thread.currentThread()。getContextClassLoader()。loadClass(driver)'工作。 Gradle插件不會出現這個問題,所以我爲[jOOQ](https://github.com/ben-manes/gradle-jooq-plugin)和[flyway]編寫了插件(https://github.com/ben -manes/gradle-flyway-plugin)來處理我的數據庫用例。 –

+0

我添加了一個println文件給閉包,它不會從lib /目錄加載.jar文件。我從來沒有想過我會說這個,但是Gradle讓我想念Maven。 –

回答

2

將Oracle庫聲明爲dependency for your build script會更方便。下面是做這件事的一種方法:

buildscript { 
    repositories { 
     flatDir { 
      dirs 'lib' 
     } 
    } 

    dependencies { 
     classpath ':ojdbc:14' 
    } 
} 
0

嘗試file.toURI().toURL()而不是file.toURL()。就一般情況而言,java.sql.DriverManager在使用Java以外的語言時存在已知問題。這就是爲什麼有必要使用類似上面的類加載器黑客。使用來自用Java編寫的二進制Gradle插件的JDBC應該可以正常工作。您也可以嘗試使用Ant任務(這相當於同樣的事情)。所以,只要停止在構建腳本中攻擊JDBC即可。

2

這是我如何解決它,4個多小時的辛苦勞作後:

task verifyDb << { 

    def props = new Properties() 
    new File("src/test/resources/liquibase.properties").withInputStream { stream -> 
     props.load(stream) 
    } 

    URLClassLoader loader = GroovyObject.class.classLoader 
    loader.addURL (new File('lib/ojdbc6.jar').toURL()) 
    Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver') 
    java.sql.Driver driverInstance = driverClass.newInstance() 
    java.sql.DriverManager.registerDriver(driverInstance) 

    groovy.sql.Sql sql = groovy.sql.Sql.newInstance(
     props.url, 
     props.username, 
     props.password) 

} 

文件ojdbc6.jar應該在$ PWD/lib目錄下。

+0

謝謝 - 那是有效的。 –

0

這也發生在我身上。我正在用Spring引導開發一個Web應用程序。我添加了mysql依賴關係並用mysql進行了測試。有效。然後我試圖加入甲骨文依賴

運行時(「神諭:ojdbc7:12.1.0.2」)

我試圖運行它,但沒有被加載的gradle Oracle和我得到了錯誤的驅動程序沒有找到類。我嘗試了幾個小時,我評論了mysql的依賴,然後嘗試刷新gradle依賴。它加載了依賴關係。

相關問題