use*_*603 1 sqlite groovy 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'
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我想在代码中连接到SQLite DB:
groovy.sql.Sql.newInstance(dbLocation, "org.sqlite.JDBC")
Run Code Online (Sandbox Code Playgroud)
它抱怨说:
java.lang.ClassNotFoundException: org.sqlite.JDBC
Run Code Online (Sandbox Code Playgroud)
是什么原因?我该如何解决?
问题是您需要将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()
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行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
Run Code Online (Sandbox Code Playgroud)
至少,它在Gradle 2.9中有效
| 归档时间: |
|
| 查看次数: |
2275 次 |
| 最近记录: |