Использование плагина jooq-sbt с ojdbc

Я использую jOOQ. Решение проблемы с конфигурацией jooq-sbt-plugin (здесь) привело к проблеме с путем к классам, которую я думаю, что это отдельно от оригинального. Мне удалось заставить конфигурацию работать, но попытка заставить ее работать с драйверами Oracle кажется невозможной.

Проблема здесь в том, что плагин, кажется, запускает свой собственный процесс java и, следовательно, требуемый путь к классам (с odbc14.jar в нем) никогда не передается. Есть ли способ заставить плагин работать? Я не мог понять, как внедрить в путь к классам плагина.

Единственный обходной путь, который я могу придумать, — вместо этого определить задачу (описано здесь: https://gist.github.com/chris-martin/5140754).

Любая помощь приветствуется. Спасибо.

Обновление 10 сентября 2013 г.

Вот конфиг:

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

person mkko    schedule 04.09.2013    source источник
comment
Не могли бы вы опубликовать свой Build.scala и точную ошибку, которую вы получаете?   -  person Eugene Yokota    schedule 09.09.2013
comment
Я попытаюсь очистить наш конфиг утром первым делом. Это почти 300 строк и содержит некоторую информацию для конкретного клиента. В основном конфигурация упоминается с ответом, примененным к ней. Ошибка была ClassNotFoundException для OracleDriver, если я правильно помню.   -  person mkko    schedule 09.09.2013


Ответы (1)


В файле readme jooq-sbt-plugin говорится:

  • Добавьте драйвер базы данных в свой список libraryDependencies с областью действия "jooq":

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

Вы пропустили Dependencies.two в приведенном выше отрывке, но, возможно, вы его упустили.

person Eugene Yokota    schedule 21.09.2013
comment
Спасибо, но я не думаю, что это возможно с драйверами Oracle. Они недоступны в репозитории Maven и должны предоставляться как неуправляемые зависимости. Я не упомянул об этом, так как думал, что общеизвестно, что драйверы Oracle нельзя использовать в libraryDependencies. - person mkko; 21.09.2013
comment
Вам все равно придется добавить их в путь к классам конфигурации jooq независимо от того, используете ли вы управляемые зависимости или нет. - person Eugene Yokota; 21.09.2013
comment
Хорошо, но я действительно не понимаю, как это сделать с неуправляемыми зависимостями. В моем понимании, это невозможно. - person mkko; 01.10.2013