在不进行编译的情况下执行sbt任务(用于使用JOOQ生成数据库类)

在不进行编译的情况下执行sbt任务(用于使用JOOQ生成数据库类),sbt,playframework-2.0,jooq,Sbt,Playframework 2.0,Jooq,我有一个PlayFramework 2.7应用程序,它是由sbt构建的 为了访问数据库,我使用了JOOQ。正如您所知,JOOQ读取我的数据库模式并生成Java源类,然后在我的应用程序中使用 应用程序仅在数据库类存在的情况下进行编译 我正在使用此自定义sbt任务生成类: // https://mvnrepository.com/artifact/org.jooq/jooq-meta libraryDependencies += "org.jooq" % "jooq-meta" % "3.12.1"

我有一个PlayFramework 2.7应用程序,它是由sbt构建的

为了访问数据库,我使用了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
}
我搜索了一下,找到了上面的脚本,并根据我的需要对其进行了一些修改,但我并不真正理解它,因为sbt/scala对我来说是新的

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

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


请帮忙!谢谢大家!

通常,当您想要生成源时,应该使用源生成器,请参见

编译中的sourceGenerators+=generateJOOQ 这样做会自动导致SBT在编译Scala/Java源代码之前先执行任务

然后,您不应该真正使用runner任务,因为它用于运行您的项目,这取决于编译任务,当然首先需要执行编译任务

您应该添加jooq元库作为构建的依赖项,而不是源代码的依赖项。这意味着您应该将
libraryDependencies+=“org.jooq”%“jooq meta”%“3.12.1”
行添加到
project/jooq.sbt

然后,您可以像在任务中一样简单地调用jooq的GenerationTool:

//build.sbt
generateJOOQ:={
org.jooq.codegen.GenerationTool.main(数组(“conf/db.conf.xml”))
((sourceManaged.value/“main/generated”)***“.java”).get
}

通常,当您想要生成源代码时,应该使用源代码生成器,请参阅

编译中的sourceGenerators+=generateJOOQ 这样做会自动导致SBT在编译Scala/Java源代码之前先执行任务

然后,您不应该真正使用runner任务,因为它用于运行您的项目,这取决于编译任务,当然首先需要执行编译任务

您应该添加jooq元库作为构建的依赖项,而不是源代码的依赖项。这意味着您应该将
libraryDependencies+=“org.jooq”%“jooq meta”%“3.12.1”
行添加到
project/jooq.sbt

然后,您可以像在任务中一样简单地调用jooq的GenerationTool:

//build.sbt
generateJOOQ:={
org.jooq.codegen.GenerationTool.main(数组(“conf/db.conf.xml”))
((sourceManaged.value/“main/generated”)***“.java”).get
}