2016-04-17 189 views
0

試圖將jdbc postgresql驅動程序添加到gradle腳本中,我使用bildscript.dependencies.classpath DSL但groovy.sql.Sql找不到它。所以我試着打印類路徑: ((URLClassLoader)this.class.classloader).getURLS.each{ println("#### ${it}") }gradle腳本classpath只包含腳本類

所有打印的是gradle temp編譯文件所在的目錄,那麼其餘的目錄在哪裏?罐子? 順便說一句我可以在我的腳本中使用導入和實例化postgres sql包中的類。 我的猜測是sql包在錯誤的類加載器中尋找類,與我一樣,所以任何人都知道如何獲得類加載器?將實例化驅動程序並將其添加到DriverManager解決該問題?

+0

看着DriverManager的源代碼,它似乎即使我手動註冊在DriverManager中的驅動程序通過實例化它自己它仍然不會幫助,因爲它驗證它找到的類加載器可以加載此類。 getClassLoader方法是本地的,因此很難找到它的代碼。我將使用該死的GroovyObject.class.classLoader hack,它將相同的類加載到本地類路徑中並完成它,但我仍然不明白classpath是如何在gradle中創建的: - ? – codeScriber

回答

1

爲了克服在我的Gradle腳本中基本上是Groovy腳本的DriverManager問題。我不得不做相當於

GroovyObject.class.classLoader.addURL(new File('path/to/jar/with/sql/driver.jar').toURI().toURL()) 
Class.forName('foo.bar.sql.Driver') 

事後才能做Sql.newInstance dbConnectionString, dbUser, dbPassword

也許這可以幫助你爲你運行。

+0

最終無法回想什麼是正確的答案,但是運行時類路徑在不注入的情況下會有所不同,就像u多餘的東西進入路徑一樣,它不起作用,我討厭這種類型的hack,特別是在這裏沒有選擇。所以我會接受你的回答:-) – codeScriber