[英]SqLite & Gradle
我在build.gradle中添加了SQLite:
dependencies {
compile 'org.xerial:sqlite-jdbc:3.8.9.1'
}
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'org.xerial:sqlite-jdbc:3.8.9.1'
}
}
一旦我想用代码连接到SQLite DB:
groovy.sql.Sql.newInstance(dbLocation, "org.sqlite.JDBC")
它抱怨:
java.lang.ClassNotFoundException: org.sqlite.JDBC
是什么原因? 我该如何解决?
问题是您需要将JDBC驱动程序放入根类加载器中,而不是仅位于通用类路径上。
您有几种选择。 其中之一是使用您自己的configuration
,然后通过GroovyObject
操作根类加载器:
import groovy.sql.Sql
configurations {
sqllite
}
repositories {
mavenCentral()
}
dependencies {
sqllite 'org.xerial:sqlite-jdbc:3.8.9.1'
}
URLClassLoader loader = GroovyObject.class.classLoader
configurations.sqllite.each { File file ->
loader.addURL(file.toURL())
}
Sql sql = Sql.newInstance('jdbc:sqlite:test.db', "org.sqlite.JDBC")
task checkSql << {
sql.execute 'CREATE TABLE TIM(name CHAR(50))'
sql.eachRow('SELECT * FROM sqlite_master') { row ->
logger.lifecycle row.toString()
}
}
然后运行gradle checkSql
应导致:
$ gradle checkSql
:checkSql
[type:table, name:TIM, tbl_name:TIM, rootpage:2, sql:CREATE TABLE TIM(name CHAR(50))]
BUILD SUCCESSFUL
Total time: 4.374 secs
至少在Gradle 2.9中有
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.