Gradle:无法执行sql,找不到驱动程序

Gradle:无法执行sql,找不到驱动程序,gradle,Gradle,我有以下gradle脚本。这导致没有找到合适的驱动程序错误,我觉得很奇怪 buildscript { repositories{ maven { url = 'http://localhost:8090/nexus/content/groups/public/' } } dependencies { classpath 'com.oracle:ojdbc6:11.2.0.4.0' } } t

我有以下
gradle
脚本。这导致
没有找到合适的驱动程序
错误,我觉得很奇怪

buildscript {
    repositories{
        maven {
            url = 'http://localhost:8090/nexus/content/groups/public/'
        }
    }
    dependencies {
        classpath 'com.oracle:ojdbc6:11.2.0.4.0'
    }
}

task sql << {
    def url = 'jdbc:oracle:thin:@' + project.properties['db_hostname'] + ':' + project.properties['db_port'] + ':' + project.properties['db_sid']
    println 'sql, db url:' + url
    def driverName = 'oracle.jdbc.OracleDriver'
    Class.forName(driverName).newInstance();
    groovy.sql.Sql sql = groovy.sql.Sql.newInstance(
            url,
            project.properties['db_username'],
            project.properties['db_password'],
            driverName
    )
}

驱动程序jar加载在与Sql类不同的类加载器上下文中。要修复此问题,请尝试添加以下内容:

// Add jars resolved by buildscript classpath configuration to the classloader which Sql will use 
URLClassLoader loader = groovy.sql.Sql.class.classLoader
project.buildscript.configurations.classpath.each { File file ->
  loader.addURL(file.toURL())
}
在调用
Sql.newInstance()
之前。它将使您的所有类路径依赖项都可用于加载
Sql
类的Groovy类加载器。
Class.forName()
应该不是必需的

有关更多信息,请参见此处的讨论:

对于我来说,这不起作用(Gradle 2.12)

但不是表演:

Class.forName("org.h2.Driver")
我做到了:

groovy.sql.loadDriver("org.h2.Driver")

Groovy
Sql.loadDriver
方法做了一些漂亮的类加载器工作。

您应该使用如下内容:

    configurations {
       db2database
    }

    buildscript {
        dependencies {
            classpath('com.ibm.db2:db2jcc4:10.5.5')//db2 driver for gradle task
            }
        }

        dependencies {
            db2database "com.ibm.db2:db2jcc4:10.5.5" //db2 driver for configuration
        }

        //load drivers for gradle tasks
        configurations.db2database.each {
            GroovyObject.class.classLoader.addURL(it.toURI().toURL())
        }

        ....
        Sql sql = Sql.newInstance(
                        envProps.getProperty('dbUri'),
                        envProps.getProperty('dbUsername'),
                        envProps.getProperty('dbPassword'),
                        envProps.getProperty('dbDriverClassName')
                )

                println sql.rows("SELECT * FROM TEST.TEST")
    configurations {
       db2database
    }

    buildscript {
        dependencies {
            classpath('com.ibm.db2:db2jcc4:10.5.5')//db2 driver for gradle task
            }
        }

        dependencies {
            db2database "com.ibm.db2:db2jcc4:10.5.5" //db2 driver for configuration
        }

        //load drivers for gradle tasks
        configurations.db2database.each {
            GroovyObject.class.classLoader.addURL(it.toURI().toURL())
        }

        ....
        Sql sql = Sql.newInstance(
                        envProps.getProperty('dbUri'),
                        envProps.getProperty('dbUsername'),
                        envProps.getProperty('dbPassword'),
                        envProps.getProperty('dbDriverClassName')
                )

                println sql.rows("SELECT * FROM TEST.TEST")