Gradle can';无法加载Oracle驱动程序

Gradle can';无法加载Oracle驱动程序,oracle,gradle,Oracle,Gradle,我需要加载Oracle驱动程序。以下是我的build.gradle文件: repositories { flatDir name: 'localRepository', dirs: 'lib' } configurations { driver } task loadOracle() << { URLClassLoader loader = GroovyObject.class.classLoader configurations.driver.e

我需要加载Oracle驱动程序。以下是我的build.gradle文件:

repositories {
    flatDir name: 'localRepository', dirs: 'lib'
}

configurations {
    driver
}

task loadOracle() << {
    URLClassLoader loader = GroovyObject.class.classLoader
    configurations.driver.each {File file ->
        loader.addURL(file.toURL())
    }
    Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver')
    java.sql.Driver driverInstance = driverClass.newInstance()
    java.sql.DriverManager.registerDriver(driverInstance)

 //   Sql sql = Sql.newInstance('jdbc-url','username','password')
}
它抱怨的路线是

Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver')
看起来它只是没有加载lib/ojdbc-14.jar文件

许多其他人在gradle中加载Oracle驱动程序时遇到困难。要多少钱


谢谢。

将Oracle库声明为更方便。这里有一种方法:

buildscript {
    repositories {
        flatDir {
            dirs 'lib'
        }
    }

    dependencies {
        classpath ':ojdbc:14'
    }
}

尝试
file.toURI().toul()
而不是
file.toul()
。一般情况下,
java.sql.DriverManager
在从java以外的语言使用时存在已知问题。这就是为什么有必要使用上面提到的类装入器黑客。从用Java编写的二进制Gradle插件中使用JDBC应该可以很好地工作。您还可以尝试使用Ant任务(相当于相同的任务)。所以,不要再在构建脚本中攻击JDBC了。

在经过4个多小时的苦工之后,我是如何解决它的:

task verifyDb << {

    def props = new Properties()
    new File("src/test/resources/liquibase.properties").withInputStream { stream ->
        props.load(stream)
    }

    URLClassLoader loader = GroovyObject.class.classLoader
    loader.addURL ( new File('lib/ojdbc6.jar').toURL() )
    Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver')
    java.sql.Driver driverInstance = driverClass.newInstance()
    java.sql.DriverManager.registerDriver(driverInstance)

    groovy.sql.Sql sql = groovy.sql.Sql.newInstance(
        props.url, 
        props.username, 
        props.password)

}
任务验证数据库
道具加载(流)
}
URLClassLoader=GroovyObject.class.classLoader
loader.addURL(新文件('lib/ojdbc6.jar').toURL())
类driverClass=loader.loadClass('oracle.jdbc.OracleDriver')
java.sql.Driver driverInstance=driverClass.newInstance()
java.sql.DriverManager.registerDriver(driverInstance)
groovy.sql.sql=groovy.sql.sql.newInstance(
props.url,
props.username,
道具(密码)
}

文件ojdbc6.jar应该是$PWD/lib。

我也遇到过这种情况。我正在用Spring boot开发一个web应用程序。我添加了mysql依赖项,并用mysql进行了测试。成功了。然后我尝试添加oracle依赖项

运行时('oracle:ojdbc7:12.1.0.2')


我试着运行它,但gradle没有加载oracle,我得到的错误是找不到驱动程序类。我尝试了几个小时,对mysql依赖项进行了注释,然后尝试刷新gradle依赖项。它加载了依赖项。

由于Groovy的类加载器,我在编写数据库任务时遇到了同样的问题。我发现
Thread.currentThread().getContextClassLoader().loadClass(驱动程序)
工作正常。Gradle插件没有出现这个问题,所以我为和编写了插件来处理我的数据库用例。我在闭包中添加了一个println文件,它没有从lib/目录加载.jar文件。我从没想过我会这么说,但格雷德尔让我想念马文。
task verifyDb << {

    def props = new Properties()
    new File("src/test/resources/liquibase.properties").withInputStream { stream ->
        props.load(stream)
    }

    URLClassLoader loader = GroovyObject.class.classLoader
    loader.addURL ( new File('lib/ojdbc6.jar').toURL() )
    Class driverClass = loader.loadClass('oracle.jdbc.OracleDriver')
    java.sql.Driver driverInstance = driverClass.newInstance()
    java.sql.DriverManager.registerDriver(driverInstance)

    groovy.sql.Sql sql = groovy.sql.Sql.newInstance(
        props.url, 
        props.username, 
        props.password)

}