无法从Gradle构建脚本查询数据库 [英] Unable to query a db from gradle build script

查看:111
本文介绍了无法从Gradle构建脚本查询数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从一个gradle脚本任务中查询一个db。我开始使用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。 S 

defaultTasks'queryTest'

buildscript {
依赖关系{
classpath files('< ..> /jtds-1.2.2。 jar')
}
}

任务queryTest(){

// l'update va su REPOSITORYURL +'/'+ alm.project .vcrProjectName +'/'+参考

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启动,这次我得到了

 执行失败的任务':queryTest'。 
> java.sql.SQLException:找不到适用于jdbc的驱动程序:jtds:sqlserver:// ITSVIL:1433 / IKALM_APP



试图在论坛中发现任何可能的建议,但没有成功。请求帮助。
解决方案

由于Groovy的动态性,Gradle中的类加载非常复杂。我想感谢@ cptwonton,它指出我有一个很好的解释:这里



我不得不修改gradle脚本,这是工作版本。 jdts-1.2.2.jar位于flatDir引用的lib目录中。

  import groovy.sql.Sql 

defaultTasks'queryTest'

任务queryTest(){
存储库{
flatDir {
dirs'lib'
}
}
配置{
jdbc
}
依赖关系{
jdbc'net.sourceforge.jtds:jtds:1.2.2'
}

doLast {
def sqlClassLoader = Sql.classLoader
configurations.jdbc.each {sqlClassLoader.addURL it.toURI()。toURL()}

def驱动程序='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)
}
}
}


I am trying to query a db from within a gradle script task. I started with a groovy script to verify the code

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" )
}

I launched with groovy QueryTest.groovy and verified that it worked. Then I moved the script within a gradle task, no changes on code but loading handled by gradle buildscript statement

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" )
        }
    }
}

Launched with gradle -b QueryTest.gradle, this time I am getting

Execution failed for task ':queryTest'.
> java.sql.SQLException: No suitable driver found for jdbc:jtds:sqlserver://ITSVIL:1433/IKALM_APP

Tried any possible advice I found in forums without success. Would ask for help.

解决方案

Due to groovy dynamic nature, classloading within gradle is quite complex. I would like to thank @cptwonton that pointed me to a great explanation here

I had to modify the gradle script a little and this is the working version. The jdts-1.2.2.jar is in the lib directory referred by flatDir.

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" )
        }
    }
}

这篇关于无法从Gradle构建脚本查询数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆