【问题标题】:gradle script classpath contains only script classgradle script classpath 只包含 script 类
【发布时间】:2016-04-17 18:21:30
【问题描述】:

尝试将 jdbc postgresql 驱动程序添加到 gradle 脚本,我使用了 bildscript.dependencies.classpath DSL,但 groovy.sql.Sql 找不到它。所以我尝试打印类路径: ((URLClassLoader)this.class.classloader).getURLS.each{ println("#### ${it}") }

所有打印的都是 gradle temp 编译文件所在的目录,那么其余的目录在哪里?罐子? 顺便说一句,我可以在我的脚本中使用 postgres sql 包中的导入和实例化类。 我的猜测是 sql 包在错误的类加载器中查找类,和我一样,所以有人知道如何获取类加载器吗?实例化驱动程序并将其添加到 DriverManager 会解决问题吗?

【问题讨论】:

  • 查看 DriverManager 源代码似乎即使我通过自己实例化手动在 DriverManager 中注册驱动程序,它仍然无济于事,因为它验证了它找到的类加载器可以加载此类。 getClassLoader 方法是原生的,因此很难找到它的代码。我将使用该死的 GroovyObject.class.classLoader hack,将相同的类加载到本地类路径中并完成它,但我仍然不明白类路径是如何在 gradle 中组织的:-?

标签: postgresql gradle classpath


【解决方案1】:

在我的 Gradle 脚本中克服 DriverManager 的问题,该脚本本质上是一个 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

也许这也有助于你让它为你运行。

【讨论】:

  • 不记得最终的正确答案是什么,但是运行时类路径在没有注入的情况下会有所不同,就像你在路径中添加额外的东西一样,它只是不起作用,我讨厌这些黑客,特别是在这里没有选择。所以我会接受你的回答:-)
猜你喜欢
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2011-06-14
  • 1970-01-01
  • 2019-02-22
  • 2015-04-22
  • 2017-08-08
相关资源
最近更新 更多