Eve*_*ali 3 sql-server groovy jtds gradle
我正在尝试从gradle脚本任务中查询数据库。我从一个普通的脚本开始验证代码
import groovy.sql.Sql
this.class.classLoader.rootLoader.addURL(new URL('file:<..>/jtds-1.2.2.jar'))
def driver = 'net.sourceforge.jtds.jdbc.Driver'
def dburl = "jdbc:jtds:sqlserver://ITSVIL:1433/APPDB"
def first
Sql.withInstance(dburl, '<..>', '<..>', driver) {
sql ->
first = sql.firstRow( "SELECT * FROM PROJECT" )
}
Run Code Online (Sandbox Code Playgroud)
我使用groovy QueryTest.groovy启动并验证了它是否有效。然后我在gradle任务中移动了脚本,代码没有任何变化,但由gradle buildscript语句处理了加载
import groovy.sql.Sql
defaultTasks 'queryTest'
buildscript {
dependencies {
classpath files('<..>/jtds-1.2.2.jar')
}
}
task queryTest () {
// l'update va su REPOSITORYURL + '/' + alm.project.vcrProjectName + '/' + Reference
doLast {
def driver = 'net.sourceforge.jtds.jdbc.Driver'
def dburl = "jdbc:jtds:sqlserver://ITSVIL:1433/APPDB"
def first
Sql.withInstance(dburl, '<..>', '<..>', driver) {
sql ->
first = sql.firstRow( "SELECT * FROM PROJECT" )
}
}
}
Run Code Online (Sandbox Code Playgroud)
用gradle -b QueryTest.gradle启动,这次我得到了
Execution failed for task ':queryTest'.
> java.sql.SQLException: No suitable driver found for jdbc:jtds:sqlserver://ITSVIL:1433/IKALM_APP
Run Code Online (Sandbox Code Playgroud)
尝试了我在论坛上发现的任何可能的建议,但均未成功。会寻求帮助。
由于groovy动态特性,gradle中的类加载非常复杂。我想给我指出来一个很好的解释感谢@cptwonton 这里
我不得不稍微修改gradle脚本,这是工作版本。jdts-1.2.2.jar位于flatDir引用的lib目录中。
import groovy.sql.Sql
defaultTasks 'queryTest'
task queryTest () {
repositories {
flatDir {
dirs 'lib'
}
}
configurations {
jdbc
}
dependencies {
jdbc 'net.sourceforge.jtds:jtds:1.2.2'
}
doLast {
def sqlClassLoader = Sql.classLoader
configurations.jdbc.each { sqlClassLoader.addURL it.toURI().toURL() }
def driver = 'net.sourceforge.jtds.jdbc.Driver'
def dburl = "jdbc:jtds:sqlserver://ITSVIL:1433/APPDB"
def first
Sql.withInstance(dburl, '<..>', '<..>', driver) {
sql ->
first = sql.firstRow( "SELECT * FROM PROJECT" )
}
}
}
Run Code Online (Sandbox Code Playgroud)