我有一个由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)
,但我发现没有先编译就可以执行自定义任务的可能性。
请帮助!谢谢!
通常,当要生成源时,应使用源生成器,请参见https://www.scala-sbt.org/1.x/docs/Howto-Generating-Files.html