[英]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.