【问题标题】:How to use custom jooq generator and use it as a sbt task?如何使用自定义 jooq 生成器并将其用作 sbt 任务?
【发布时间】:2021-05-25 00:26:45
【问题描述】:

我正在尝试使用 JOOQ 在使用 sbt 任务的 java play 框架项目中生成 Daos。如果我使用默认的 org.jooq.codegen.JavaGenerator,它工作正常。虽然当我尝试使用扩展原始生成器的自定义类时,我无法在 xml 配置文件中正确链接它。它总是以 java.lang.ClassNotFoundException 结束。

我应该把自定义生成器放在哪里,我应该在配置文件中添加什么?

//project/jooq.sbt:
libraryDependencies += "org.jooq" % "jooq-meta" % "3.14.7"
libraryDependencies += "org.jooq" % "jooq-codegen" % "3.14.7"
libraryDependencies += "org.postgresql" % "postgresql" % "42.2.5"
//build.sbt:
val generateJOOQ = taskKey[Seq[File]]("Generate JooQ classes")
generateJOOQ := {
org.jooq.codegen.GenerationTool.main(Array("conf/jooq-config.xml"))
  ((sourceManaged.value / "main/generated") ** "*.java").get
}
    //sbt console, successful with default generator
    $ generateJOOQ
    [success] Total time: 3 s, completed 22. 2. 2021 19:02:47
    //failing configuration with custom generator
    <generator>
        <name>generated.codegen.JOOQJavaGenerator</name>
    </generator
    //sbt console, failing with custom generator
    $ generateJOOQ
    19:07:05.480 [pool-16-thread-1] ERROR org.jooq.codegen.GenerationTool - Error in file: conf/jooq-config.xml. Error : generated.codegen.JOOQJavaGenerator
    java.lang.ClassNotFoundException: generated.codegen.JOOQJavaGenerator
        at java.net.URLClassLoader.findClass(URLClassLoader.java:471) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:589) ~[?:?]
        at java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[?:?]
      | => rat org.jooq.codegen.GenerationTool.loadClass0(GenerationTool.java:1075) ~[?:?]
        at org.jooq.codegen.GenerationTool.loadClass(GenerationTool.java:1005) ~[?:?]
    at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:382) ~[?:?]
    at org.jooq.codegen.GenerationTool.run(GenerationTool.java:233) ~[?:?]
    at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:228) ~[?:?]
    at org.jooq.codegen.GenerationTool.main(GenerationTool.java:200) ~[?:?]
    at $281b221f498d45a1a3c3$.$anonfun$$sbtdef$1(/home/severste/SyncthingSync/Uniqway/sources/microservices/dummy-service/uniqway-dummy-service/build.sbt:59) ~[?:?]
    at scala.Function1.$anonfun$compose$1(Function1.scala:49) ~[scala-library.jar:?]
    at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62) ~[collections_2.12-1.3.13.jar:1.3.3]
    at sbt.std.Transform$$anon$4.work(Transform.scala:67) ~[task-system_2.12-1.3.13.jar:1.3.13]
    at sbt.Execute.$anonfun$submit$2(Execute.scala:281) ~[tasks_2.12-1.3.13.jar:1.3.13]
    at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19) ~[util-control_2.12-1.3.3.jar:1.3.3]
    at sbt.Execute.work(Execute.scala:290) ~[tasks_2.12-1.3.13.jar:1.3.13]
    at sbt.Execute.$anonfun$submit$1(Execute.scala:281) ~[tasks_2.12-1.3.13.jar:1.3.13]
    at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178) ~[tasks_2.12-1.3.13.jar:1.3.13]
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:37) [tasks_2.12-1.3.13.jar:1.3.13]
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]

【问题讨论】:

    标签: java playframework sbt jooq


    【解决方案1】:

    我不熟悉 SBT,但如果您使用 Maven,您只需创建一个包含您的 JOOQJavaGenerator 的新项目或模块,并将其作为依赖项添加到运行 JOOQJavaGenerator 的项目或模块中.

    一些构建系统可能允许交错不同的代码生成和编译步骤,但最简洁的方法始终是将编译 JOOQJavaGenerator 的任务外包给新项目或模块。

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 2016-01-16
      • 2012-05-06
      • 2021-12-17
      • 2012-07-15
      • 1970-01-01
      • 2017-06-15
      • 2012-12-28
      • 2018-09-04
      相关资源
      最近更新 更多