2016-04-17 8 views
0

Ich versuche, jdbc Postgresql-Treiber zu gradle Skript hinzufügen, ich habe die Bildskript.dependencies.classpath DSL, aber groovy.sql.Sql kann es nicht finden. so habe ich versucht, die Classpath Druck: ((URLClassLoader)this.class.classloader).getURLS.each{ println("#### ${it}") }Gradle Skript Classpath enthält nur Skript Klasse

alles, was gedruckt wurde, war das Verzeichnis, in dem die gradle Temp kompilierten Dateien befinden, also wo ist die ganze Rest der Verzeichnisse? Krug ? BTW ich kann in meinem Skript importieren und instanziieren Klassen aus dem postgres sql-Paket. meine Vermutung ist, dass die sql-Pakete nach der Klasse im falschen Classloader suchen, genau wie ich, also weiß jemand, wie man den Klassenlader ergreift? Wird der Treiber instanziiert und dem DriverManager hinzugefügt, um das Problem zu lösen?

+0

Mit Blick auf DriverManager Quellcode scheint es, dass, selbst wenn ich manuell einen Treiber in DriverManager durch Instanziierung es selbst es nicht hilft, wie es überprüft, dass der Klassenlader, die gefunden wurde, diese Klasse laden kann. Die getClassLoader-Methode ist nativ und daher ist es schwer, ihren Code zu finden. Ich werde den verdammten GroovyObject.class.classLoader-Hack verwenden, der die gleichen Klassen in den lokalen Klassenpfad lädt und damit fertig ist, aber ich verstehe immer noch nicht, wie der Klassenpfad in Gradle angelegt ist: -? – codeScriber

Antwort

1

Um Probleme mit DriverManager in meinem Gradle-Skript zu überwinden, die im Wesentlichen ein Groovy-Skript ist. Ich hatte das Äquivalent von

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

in der Lage sein zu tun Sql.newInstance dbConnectionString, dbUser, dbPassword danach zu tun.

Vielleicht hilft Ihnen das, damit es auch für Sie läuft.

+0

kann sich nicht erinnern, was war die richtige Antwort schließlich, aber die Laufzeit Classpath ist irgendwie anders ohne Injektion wie du extra Sache in den Weg, es ist einfach nicht funktioniert, und ich hasse diese Art von Hacks, speziell hier gibt es keine andere Wahl. Also werde ich deine Antwort akzeptieren :-) – codeScriber

Verwandte Themen