2013-09-04 2 views
4

나는 jOOQ을 사용하고 있습니다. jooq-sbt-plugin config (here)로 문제를 해결하면 원래 클래스 패스와 별개라고 생각되는 클래스 경로 문제가 발생했습니다. 나는 구성을 작동시킬 수 있었지만 오라클 드라이버로 작동시키려는 시도는 불가능한 것처럼 보였다.ojdbc에서 jooq-sbt-plugin 사용

여기에서 문제는 플러그인이 자체적으로 java 프로세스를 실행하는 것으로 보이며 이에 따라 필수 클래스 경로 (odbc14.jar 포함)가 전달되지 않는다는 것입니다. 플러그인 작동을 얻을 수있는 방법이 있습니까? 나는 플러그인의 클래스 패스에 주입하는 방법을 알 수 없었다.

내가 해결할 수있는 유일한 방법은 대신 작업을 정의하는 것입니다 (여기에서 설명 : https://gist.github.com/chris-martin/5140754).

도움을 주시면 대단히 감사하겠습니다. 감사. 여기에 업데이트

2013년 9월 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 
+0

Build.scala를 게시하고 정확한 오류를 표시 할 수 있습니까? –

+0

아침에 설정을 정리하려고합니다. 거의 300 라인이며 고객 특정 정보가 포함되어 있습니다. 기본적으로 설정은 응답에 적용된 내용입니다. 올바르게 기억하면 OracleDriver에 대한 ClassNotFoundException 오류가 발생했습니다. – mkko

답변

0

jooq-sbt-plugin의 추가 정보는 말한다 :

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

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

위의 발췌문에서 Dependencies.two을 버렸지 만 누락 된 것일 수 있습니다.

+0

고마워요,하지만 오라클 드라이버가 그렇게 생각하지 않습니다. Maven 저장소에서는 사용할 수 없으며 관리되지 않는 종속 항목으로 제공해야합니다. 오라클 드라이버가'libraryDependencies'에서 사용될 수 없다는 것이 일반적으로 알려져 있다고 생각하면서 언급하지 않았습니다. – mkko

+0

관리 종속성을 사용하는지 여부와 상관없이 여전히 "jooq"구성의 클래스 경로에 추가해야합니다. –

+0

좋아요,하지만 관리되지 않는 종속성을 사용하여 실제로 어떻게하는지 모르겠습니다. 내 이해를 위해, 그것은 불가능합니다. – mkko