2016-04-17 5 views
0

пытается добавить jdbc postgresql драйвер для скрипта gradle, я использовал DSL, но groovy.sql.Sql не нашел его. поэтому я попробовал распечатать путь к классу: ((URLClassLoader)this.class.classloader).getURLS.each{ println("#### ${it}") }gradle script classpath содержит только класс сценария

все, что было напечатано, это каталог, где хранятся файлы, скомпилированные в стиле gradle temp, так где же все остальные каталоги? jar? BTW Я могу в своем скрипте использовать импорт и создавать экземпляры классов из пакета postgres sql. Мое предположение заключается в том, что пакеты sql ищут класс в неправильном загрузчике классов, так же как и я, поэтому кто-нибудь знает, как удержать загрузчик классов? создаст экземпляр драйвера и добавит его в DriverManager, решив проблему?

+0

, глядя на исходный код драйвера DriverManager, кажется, что даже если я вручную зарегистрирую драйвер в DriverManager, создав его самостоятельно, он все равно не поможет, так как он проверяет, что найденный загрузчик классов может загрузить этот класс. метод getClassLoader является родным и поэтому трудно найти его код. я буду использовать проклятый GroovyObject.class.classLoader hack, который загружает одни и те же классы в локальный путь к классам и будет выполнен с ним, но я до сих пор не понимаю, как путь к классам orginized в gradle: -? – codeScriber

ответ

1

Чтобы преодолеть проблемы с DriverManager в моем скрипте Gradle, который по существу является скриптом Groovy. Я должен был сделать эквивалент

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

не может вспомнить, что было правильным ответом в конечном итоге, но путь к классам времени выполнения каким-то образом отличается от инъекции, как и дополнительная вещь, в путь, который он просто не работает, и я ненавижу такие хаки, особенно здесь нет выбора. Поэтому я приму свой ответ :-) – codeScriber