为什么sbt运行时会使用Slick的代码生成器抛出重叠的输出目录?

卡瓦列罗

我试图迁移从播放2.3计算机数据库的例子来自anorm于油滑2.我想用油滑的代码生成器

这是我的 project/build.scala

import sbt._
import Keys._

object build extends Build {

  lazy val mainProject = Project(
    id = "main",
    base = file("."),
    settings = Defaults.coreDefaultSettings ++ Seq(
      scalaVersion := "2.10.4",
      libraryDependencies ++= List(
        "com.typesafe.slick" %% "slick" % "2.0.2",
        "org.slf4j" % "slf4j-nop" % "1.6.4",
        "com.h2database" % "h2" % "1.3.170"
      ),
      // register manual sbt command
      slick <<= slickCodeGenTask,
      // register automatic code generation on every compile, remove for only manual use
      sourceGenerators in Compile <+= slickCodeGenTask
    )
  )

  // Slick's code generation task
  lazy val slick = TaskKey[Seq[File]]("gen-tables")

  lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
    // place generated files in sbt's managed sources folder
    val outputDir = (dir / "slick").getPath
    // connection info for a pre-populated throw-away, in-memory db for this demo, which is freshly initialized on every run
    val url = "jdbc:h2:mem:test;INIT=runscript from 'conf/sql/create.sql'"
    val jdbcDriver = "org.h2.Driver"
    val slickDriver = "scala.slick.driver.H2Driver"
    val pkg = "demo"
    toError(r.run("scala.slick.model.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg), s.log))
    val fname = outputDir + "/demo/Tables.scala"
    Seq(file(fname))
  }
}

当我尝试运行我的应用程序时,sbt run出现以下错误:

java.lang.RuntimeException: Overlapping output directories:/home/myuser/computer-database/target:
    ProjectRef(file:/home/myuser/computer-database/,main)
    ProjectRef(file:/home/myuser/computer-database/,root)
    at scala.sys.package$.error(package.scala:27)
    at scala.Predef$.error(Predef.scala:142)
    at sbt.Load$$anonfun$apply$8.apply(Load.scala:140)
    at sbt.Load$$anonfun$apply$8.apply(Load.scala:140)
    at scala.Option.foreach(Option.scala:236)
    at sbt.Load$.apply(Load.scala:140)
    at sbt.Load$.defaultLoad(Load.scala:37)
    at sbt.BuiltinCommands$.doLoadProject(Main.scala:473)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:467)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:467)
    at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:60)
    at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:60)
    at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:62)
    at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:62)
    at sbt.Command$.process(Command.scala:95)
    at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:100)
    at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:100)
    at sbt.State$$anon$1.process(State.scala:179)
    at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:100)
    at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:100)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.MainLoop$.next(MainLoop.scala:100)
    at sbt.MainLoop$.run(MainLoop.scala:93)
    at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:71)
    at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:66)
    at sbt.Using.apply(Using.scala:25)
    at sbt.MainLoop$.runWithNewLog(MainLoop.scala:66)
    at sbt.MainLoop$.runAndClearLast(MainLoop.scala:49)
    at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:33)
    at sbt.MainLoop$.runLogged(MainLoop.scala:25)
    at sbt.StandardMain$.runManaged(Main.scala:57)
    at sbt.xMain.run(Main.scala:29)
    at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
    at xsbt.boot.Launch$.withContextLoader(Launch.scala:129)
    at xsbt.boot.Launch$.run(Launch.scala:109)
    at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:36)
    at xsbt.boot.Launch$.launch(Launch.scala:117)
    at xsbt.boot.Launch$.apply(Launch.scala:19)
    at xsbt.boot.Boot$.runImpl(Boot.scala:44)
    at xsbt.boot.Boot$.main(Boot.scala:20)
    at xsbt.boot.Boot.main(Boot.scala)
[error] Overlapping output directories:/home/myuser/computer-database/target:
[error]     ProjectRef(file:/home/myuser/computer-database/,main)
[error]     ProjectRef(file:/home/myuser/computer-database/,root)
[error] Use 'last' for the full log.

如果我更改id = "main"id = "root"上一个错误,则不会再触发该错误,而是会触发一个新错误:

java.lang.RuntimeException: No main class detected.
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 1 s, completed 08-Jun-2014 20:22:41

Project ID(无论是什么)似乎都存在问题。我在这里想念什么?

卡瓦列罗

解决方案是从中删除root声明build.sbt并启用中的PlayScala插件Build.scala

build.sbt

name := "computer-database"

version := "1.0"

libraryDependencies ++= Seq(
    jdbc,
    anorm,
    "com.typesafe.slick" %% "slick" % "2.0.2",
    "com.typesafe.play" %% "play-slick" % "0.7.0-M1"
)

scalaVersion := Option(System.getProperty("scala.version")).getOrElse("2.10.4")

project/Build.scala

import play.PlayScala
import sbt._
import Keys._


object myBuild extends Build {

    lazy val mainProject = Project(
        id = "main",
        base = file("."),
        settings = Defaults.coreDefaultSettings ++ Seq(
            scalaVersion := "2.10.4",
            libraryDependencies ++= List(
                "com.typesafe.slick" %% "slick" % "2.0.2",
                "org.slf4j" % "slf4j-nop" % "1.6.4",
                "com.h2database" % "h2" % "1.3.170"
            ),
            slick <<= slickCodeGenTask, // register manual sbt command
            sourceGenerators in Compile <+= slickCodeGenTask // register automatic code generation on every compile, remove for only manual use
        )
    ).enablePlugins(PlayScala)

    // code generation task
    lazy val slick = TaskKey[Seq[File]]("gen-tables")

    lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
        val outputDir = (dir / "slick").getPath // place generated files in sbt's managed sources folder
        val url = "jdbc:h2:mem:test;INIT=runscript from 'conf/sql/create.sql'" // connection info for a pre-populated throw-away, in-memory db for this demo, which is freshly initialized on every run
        val jdbcDriver = "org.h2.Driver"
        val slickDriver = "scala.slick.driver.H2Driver"
        val pkg = "demo"
        toError(r.run("scala.slick.model.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg), s.log))
        val fname = outputDir + "/demo/Tables.scala"
        Seq(file(fname))
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么更改随机数生成器会更改C中快速排序的运行时间

来自分类Dev

为什么R函数在第一次运行时会使用更多的内存?

来自分类Dev

Python:在运行时创建生成器

来自分类Dev

为什么此代码使用UndecidableInstances进行编译,然后生成运行时无限循环?

来自分类Dev

为什么生成器挂起而不抛出异常?

来自分类Dev

为什么这段代码在运行时会生成很大的可执行文件(大约81M)?

来自分类Dev

您可以在laravel的运行时使用查询生成器来构建带有动态WHERE子句的查询吗?

来自分类Dev

为什么BufferedImages在程序运行时会增加它们使用的ram数量?

来自分类Dev

为什么GWT使用代码生成器而不是注释处理器?

来自分类Dev

为什么Visual Studio运行时库源代码存储在两个目录中?

来自分类Dev

列出了Rails生成器,但运行时未找到

来自分类Dev

为什么我的代码需要使用fasta格式的DNA并将其转换为向量,所以在运行时会崩溃

来自分类Dev

当同时使用两个重叠字段时,为什么下面的代码运行时没有错误?

来自分类Dev

当同时使用两个重叠字段时,为什么下面的代码运行时没有错误?

来自分类Dev

为什么此代码在JSBin中重复运行时会有所不同?

来自分类Dev

为什么建议对纱线使用云生成器?

来自分类Dev

为什么从〜运行时find命令找不到目录?

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

为什么从未执行过的Swift 3代码会抛出运行时错误?

来自分类Dev

为什么 next() 有时会在生成器上隐式调用?

来自分类Dev

python中标准随机数生成器的Big-O运行时是什么?(最坏的情况下)

来自分类Dev

为什么我的代码需要这么长时间才能运行,为什么它的运行时会发生重大变化?

来自分类Dev

当使用crontab自动运行时,为什么此脚本会输出损坏的文件?

来自分类Dev

(为什么)我不能从生成器中抛出异常吗?

来自分类Dev

为什么此代码给运行时分段错误?

来自分类Dev

为什么我的代码出现运行时错误?

来自分类Dev

为什么我的代码给出运行时错误?

来自分类Dev

如何使用Slick的源代码生成器设置用户名和密码?

来自分类Dev

在Slick 2代码生成器中使用PostgreSQL JSON类型

Related 相关文章

  1. 1

    为什么更改随机数生成器会更改C中快速排序的运行时间

  2. 2

    为什么R函数在第一次运行时会使用更多的内存?

  3. 3

    Python:在运行时创建生成器

  4. 4

    为什么此代码使用UndecidableInstances进行编译,然后生成运行时无限循环?

  5. 5

    为什么生成器挂起而不抛出异常?

  6. 6

    为什么这段代码在运行时会生成很大的可执行文件(大约81M)?

  7. 7

    您可以在laravel的运行时使用查询生成器来构建带有动态WHERE子句的查询吗?

  8. 8

    为什么BufferedImages在程序运行时会增加它们使用的ram数量?

  9. 9

    为什么GWT使用代码生成器而不是注释处理器?

  10. 10

    为什么Visual Studio运行时库源代码存储在两个目录中?

  11. 11

    列出了Rails生成器,但运行时未找到

  12. 12

    为什么我的代码需要使用fasta格式的DNA并将其转换为向量,所以在运行时会崩溃

  13. 13

    当同时使用两个重叠字段时,为什么下面的代码运行时没有错误?

  14. 14

    当同时使用两个重叠字段时,为什么下面的代码运行时没有错误?

  15. 15

    为什么此代码在JSBin中重复运行时会有所不同?

  16. 16

    为什么建议对纱线使用云生成器?

  17. 17

    为什么从〜运行时find命令找不到目录?

  18. 18

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  19. 19

    为什么从未执行过的Swift 3代码会抛出运行时错误?

  20. 20

    为什么 next() 有时会在生成器上隐式调用?

  21. 21

    python中标准随机数生成器的Big-O运行时是什么?(最坏的情况下)

  22. 22

    为什么我的代码需要这么长时间才能运行,为什么它的运行时会发生重大变化?

  23. 23

    当使用crontab自动运行时,为什么此脚本会输出损坏的文件?

  24. 24

    (为什么)我不能从生成器中抛出异常吗?

  25. 25

    为什么此代码给运行时分段错误?

  26. 26

    为什么我的代码出现运行时错误?

  27. 27

    为什么我的代码给出运行时错误?

  28. 28

    如何使用Slick的源代码生成器设置用户名和密码?

  29. 29

    在Slick 2代码生成器中使用PostgreSQL JSON类型

热门标签

归档