【问题标题】:Using jooq-sbt-plugin with ojdbc将 jooq-sbt-plugin 与 ojdbc 一起使用
【发布时间】:2013-10-07 03:49:28
【问题描述】:

我正在使用jOOQ。解决jooq-sbt-plugin config (here) 的问题导致了我认为与原始问题不同的类路径问题。我设法让配置工作,但试图让它与 Oracle 驱动程序一起玩似乎是不可能的。

这里的问题是插件似乎运行自己的java 进程,因此从未传递所需的类路径(其中包含odbc14.jar)。有没有办法让插件工作?我不知道如何注入插件的类路径。

我能想出的唯一解决方法是定义一个任务(此处描述:https://gist.github.com/chris-martin/5140754)。

非常感谢任何帮助。谢谢。

2013-09-10 更新

这是配置:

import sbt._
import Keys._
import JOOQPlugin._

object SampleBuild extends Build {

    lazy val all = Project(id = "all", base = file("."), settings = defaultSettings) aggregate(
      one, two
    )

    lazy val one = Project(
        id = "one",
        base = file("one"),
        settings = defaultSettings ++ Seq(
            libraryDependencies ++= Dependencies.one
        )
    )

    lazy val two = Project(
        id = "two",
        base = file("two"),
        settings = defaultSettings ++ jooqSettings ++ customJooqSettings ++  Seq(
            libraryDependencies ++= Dependencies.two
        )
    ) dependsOn (one)

    override lazy val settings = super.settings ++ buildSettings

    lazy val buildSettings = Seq(
        organization := "org.sample",
        version      := "0.1-SNAPSHOT",
        scalaVersion := "2.10.2"
    )

    lazy val defaultSettings = Defaults.defaultSettings ++ Seq(
        scalacOptions in Compile ++= scalacParams,
        externalResolvers in Compile := Resolvers.commonResolvers,
        shellPrompt  := ShellPrompt.buildShellPrompt,
        resolvers ++= Resolvers.commonResolvers
    )

    lazy val customJooqSettings = Seq(
        jooqOptions := jooqBvpOptions,
        jooqOutputDirectory := new java.io.File("../src/appdb/src/main/java")
        )

    lazy val jooqBvpOptions = Seq(
        "jdbc.driver"                    -> "oracle.jdbc.OracleDriver",
        "jdbc.url"                       -> "jdbc:oracle:thin:@//<some server>",
        "jdbc.user"                      -> "<some user>",
        "jdbc.password"                  -> "<some pwd>",
        "generator.database.name"        -> "org.jooq.util.oracle.OracleDatabase",
        "generator.database.inputSchema" -> "<some schema>",
        "generator.database.includes"    -> "table1|table2|table3",
        "generator.target.packageName"   -> "org.example.generated")
}

object Resolvers { /* ... */ }

object Dependencies { /* ... */ }

object ShellPrompt { /* ... */ }

这是错误:

[info] Initialising properties  : /jooq-config2705409947508036761.xml
[error] Cannot read /jooq-config2705409947508036761.xml. Error : oracle.jdbc.OracleDriver
[error] java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
[error]     at java.security.AccessController.doPrivileged(Native Method)
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
[error]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
[error]     at java.lang.Class.forName0(Native Method)
[error]     at java.lang.Class.forName(Class.java:171)
[error]     at org.jooq.util.GenerationTool.main(GenerationTool.java:269)
[error]     at org.jooq.util.GenerationTool.main(GenerationTool.java:123)
[error] Usage : GenerationTool <configuration-file>
[trace] Stack trace suppressed: run last appdb-tool/jooq:codegen for the full output.
[error] (appdb-tool/jooq:codegen) Failed with return code: 255
[error] Total time: 1 s, completed Sep 10, 2013 1:45:24 PM

【问题讨论】:

  • 您能否发布您的 Build.scala,以及您遇到的确切错误?
  • 我会在早上第一件事尝试清理我们的配置。它有近 300 行,包含一些客户特定的信息。基本上,配置是提到的,并附有答案。如果我没记错的话,错误是 OracleDriver 的 ClassNotFoundException。

标签: scala sbt jooq ojdbc jooq-sbt-plugin


【解决方案1】:

jooq-sbt-plugin 的自述文件说:

  • 将您的数据库驱动程序添加到您的 libraryDependencies 列表中,范围为“jooq”:

    libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.22" % "jooq"
    

你在上面的摘录中遗漏了Dependencies.two,但也许你错过了。

【讨论】:

  • 谢谢,但我认为 Oracle 驱动程序无法做到这一点。它们在 Maven 存储库中不可用,需要作为非托管依赖项提供。我没有提到这一点,因为我认为众所周知,Oracle 驱动程序不能在libraryDependencies 中使用。
  • 无论您是否使用托管依赖项,您仍然必须将它们添加到“jooq”配置的类路径中。
  • 好的,但我真的不明白如何使用非托管依赖项来做到这一点。据我了解,这是不可能的。
猜你喜欢
  • 2013-08-22
  • 2016-06-03
  • 2021-10-04
  • 2017-10-19
  • 2014-06-02
  • 2015-05-23
  • 2013-08-19
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多