【问题标题】:gradle build.gradle dependencies - oracle driver?gradle build.gradle 依赖项 - oracle 驱动程序?
【发布时间】:2012-03-30 06:15:15
【问题描述】:

我对 build.gradle 文件本身有一个 jar 依赖项。我正在使用这个定义:

buildscript {
  repositories {
      flatDir {
          dirs 'lib'
      }
  }
  dependencies {
      classpath name: 'ojdbc16'
  }
}

这个任务:

task mytask() << {
    String updateQuery = "somequery"
    println "Setting up test user with query:\n${updateQuery}"
    Sql sql = Sql.newInstance("jdbc:oracle:thin:@//host:port/sid", user, password, 'oracle.jdbc.driver.OracleDriver')
    boolean successful = sql.execute(updateQuery)
}

但我得到了这个例外:

Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:452)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:436)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:60)
    ... 54 more
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
    at build_5kgfd83hhriam4rhlh34a1l160$_run_closure3.doCall(/Users/localadmin/projects/test-case-runner/build.gradle:41)
    ... 57 more

这里会发生什么?我没有收到关于类路径定义的任何错误,所以我假设我的依赖解析工作正常。什么可能失败?

【问题讨论】:

  • 猜想,但我注意到你的依赖被命名为'ojdbc16',你重命名了jar吗?原来的名字是'ojdbc6'
  • 您尝试过classpath ':ojdbc16:' 吗?我相信您的 JAR 文件的文件名中没有定义的版本号,由破折号分隔,对吗?
  • 如果您阅读下面我更新的答案,语法很好:P.

标签: groovy dependencies gradle


【解决方案1】:
repositories {
    flatDir name: 'localRepository', dirs: 'lib'
}

configurations {
    driver
}

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

    Sql sql = Sql.newInstance('jdbc-url','username','password')
}

【讨论】:

【解决方案2】:

由于您使用的是 gradle,因此您可以使用 groovy 使其更短且更易于使用

def props = [:]
def ds = new BasicDataSource()
ds.with {
    url = props['database.url']
    driverClassName = props['database.driverClassName']
    password = props['database.password']
    username = props['database.username']
}

def sql = new groovy.sql.Sql(ds)
def r = sql.firstRow 'select 1 as val from dual'
println r.val

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2017-01-26
    • 2020-07-20
    • 2012-06-03
    • 2021-01-07
    • 1970-01-01
    • 2014-04-15
    • 2016-09-24
    • 2020-07-13
    相关资源
    最近更新 更多