我正在尝试从gradle脚本任务中查询数据库。我从一个groovy脚本开始验证代码
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" )
}
我使用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" )
}
}
}
使用gradle -b QueryTest.gradle启动,这次我得到了
Execution failed for task ':queryTest'.
> java.sql.SQLException: No suitable driver found for jdbc:jtds:sqlserver://ITSVIL:1433/IKALM_APP
尝试在论坛中找到的任何可能的建议都没有成功。会请求帮助。
答案 0 :(得分:4)
由于groovy动态特性,gradle中的类加载非常复杂。我要感谢@cptwonton给我一个很好的解释here
我不得不稍微修改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" )
}
}
}
答案 1 :(得分:0)
您的net.sourceforge.jtds.jdbc.Driver
似乎无法使用。
这可能是因为
buildscript {
dependencies {
classpath files('..../jtds-1.2.2.jar')
}
}
您提供给类路径文件的路径(路径)需要是gradle项目目录根目录的相对路径。我建议将你的jtds jar移到libs目录中,看看这个doc: https://docs.gradle.org/current/userguide/dependency_management.html#sub:file_dependencies
此外,jtds jar在maven repo上,为什么不使用它而不是本地jar? gradle和maven等构建工具的优点在于,您无需在本地存储或管理许多流行的jar。