无需事先编译即可执行sbt任务(用于使用JOOQ生成数据库类)

问题描述 投票:1回答:1

我有一个由sbt构建的PlayFramework 2.7应用程序。

为了访问数据库,我使用的是JOOQ。如您所知,JOOQ读取我的数据库架构并生成Java源类,然后将其用于我的应用程序。

如果存在数据库类,则仅编译应用程序。

我正在通过此自定义sbt任务生成类:

// https://mvnrepository.com/artifact/org.jooq/jooq-meta
libraryDependencies += "org.jooq" % "jooq-meta" % "3.12.1"

lazy val generateJOOQ = taskKey[Seq[File]]("Generate JooQ classes")
generateJOOQ := {
  (runner in Compile).value.run("org.jooq.codegen.GenerationTool",
  (fullClasspath in Compile).value.files,    
  Array("conf/db.conf.xml"),
  streams.value.log).failed foreach (sys error _.getMessage)
  ((sourceManaged.value / "main/generated") ** "*.java").get
}

我在Google周围搜索并找到了上面的脚本,并根据我的需要对其进行了一些修改,但是由于sbt / scala对我来说是新手,所以我不太了解它。

现在的问题是,当我启动generateJOOQ时,sbt首先尝试编译项目,但失败了,因为缺少数据库类]。所以我要做的是,注释掉所有使用生成的类的代码,执行编译我的项目的任务,生成数据库类,然后再次启用注释掉的代码。 这很痛苦!

我想问题是命令(runner in Compile),但我发现没有先编译就可以执行自定义任务的可能性。

请帮助!谢谢!

sbt playframework-2.0 jooq
1个回答
0
投票

通常,当要生成源时,应使用源生成器,请参见https://www.scala-sbt.org/1.x/docs/Howto-Generating-Files.html

© www.soinside.com 2019 - 2024. All rights reserved.