mkko
mkko

Reputation: 4532

Using jooq-sbt-plugin with ojdbc

I'm using jOOQ. Solving an issue with jooq-sbt-plugin config (here) resulted in a classpath issue which I think is separate from the original one. I managed to get the configuration to work but trying to get it play with Oracle drivers seems impossible.

The issue here is that the plugin seems run its own java process and hence the required classpath (with odbc14.jar in it) is never passed on. Is there any way to get the plugin work? I couldn't figure out how to inject to the plugin's classpath.

The only workaround I can come up with is by defining a task instead (described here: https://gist.github.com/chris-martin/5140754).

Any help is greatly appreciated. Thanks.

2013-09-10 Update

Here's the config:

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 { /* ... */ }

And here's the error:

[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

Upvotes: 4

Views: 836

Answers (1)

Eugene Yokota
Eugene Yokota

Reputation: 95644

jooq-sbt-plugin's readme says:

  • Add your database driver to your list of libraryDependencies with "jooq" scope:

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

You left out Dependencies.two in the above excerpt, but maybe you're missing that.

Upvotes: 0

Related Questions