首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Play框架中使用Postgres的巧妙代码生成器

在Play框架中使用Postgres的巧妙代码生成器
EN

Stack Overflow用户
提问于 2015-08-21 15:06:23
回答 1查看 1.4K关注 0票数 0

我对Scala和Slick很陌生。尝试从这里使用代码生成器示例https://github.com/slick/slick-codegen-example并将其更改为Postgres驱动程序。下面是我在Build.Scala文件中的代码:

代码语言:javascript
复制
import sbt._
import Keys._
import Tests._


    object myBuild extends Build {
      val slickVersion = "3.0.2"

      lazy val mainProject = Project(
        id="main",
        base=file("."),
        settings = Project.defaultSettings ++ Seq(
          scalaVersion := "2.11.6",
          libraryDependencies ++= List(
            "com.typesafe.slick" %% "slick" % slickVersion,
            "com.typesafe.slick" %% "slick-codegen" % slickVersion,
            "org.slf4j" % "slf4j-nop" % "1.7.12",
            "org.postgresql" % "postgresql" % "9.4-1201-jdbc41"
          ),
          slick <<= slickCodeGenTask, // register manual sbt command
          sourceGenerators in Compile <+= slickCodeGenTask // register automatic code generation on every compile, remove for only manual use
        )
      )

      // 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:postgresql://localhost:5432/db'" // connection info
        val jdbcDriver = "org.postgresql.Driver"
        val slickDriver = "slick.driver.PostgresDriver"
        val pkg = "dao"
        val user="postgres"
        val password="pass"
        toError(r.run("slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, user, password), s.log))
        val fname = outputDir + "/dao/Tables.scala"
        Seq(file(fname))
      }
    }

我唯一改变的是驱动和登录,密码。据我所知,它应该在每次运行时生成代码。

活化剂运行

但它不会产生任何代码。另外,如何手动运行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 20:57:14

您可以将其添加到build.sbt文件中:

代码语言:javascript
复制
val conf = ConfigFactory.parseFile(new File("conf/application.conf")).resolve()
slick <<= slickCodeGenTask

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
    val url = conf.getString("slick.dbs.default.db.url")
    val jdbcDriver = conf.getString("slick.dbs.default.db.driver")
    val slickDriver = conf.getString("slick.dbs.default.driver").dropRight(1)
    val pkg = "test"
    val user = conf.getString("slick.dbs.default.db.user")
    val password = conf.getString("slick.dbs.default.db.password")
    toError(r.run("slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, user, password), s.log))
    val fname = outputDir + s"/$pkg/Tables.scala"
    Seq(file(fname))
}

并使用activator gen-tables运行它

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32143739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档