具有静态依赖性的光滑代码生成器

时间:2014-10-16 11:22:24

标签: scala sbt slick

我试图在Play 2.3应用程序中使用Slick 2.1和MS SQL Server。我一直试图让Slick的代码生成器在Build.scala中工作。这是因为MS SQL Server JDBC驱动程序不在maven上,我只是手动将驱动程序jar文件放在/lib文件夹中。目前我收到此错误:

[error] (run-main-0) java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

这就是代码生成器所在的部分:

lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
    val outputDir = (dir / "slick").getPath
    val url = "jdbc:sqlserver://localhost:1433;databaseName=mydb"
    val jdbcDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"
    val slickDriver = "com.typesafe.slick.driver.ms.SQLServerDriver"
    val pkg = "db"
    toError(r.run("scala.slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, user, pswd), s.log))
    val fname = outputDir + "/db/Tables.scala"
    Seq(file(fname))
}

如何使S SQL代码生成器与MS SQL Server JDBC驱动程序一起播放?

2 个答案:

答案 0 :(得分:0)

Play 2.3中的SBT似乎没有自动将lib文件夹的内容添加到类路径中,所以在为我的Intellij IDEA运行idea命令之后我偶然发现了一个解决方案,其中包括从lib到classpath的jar。

此外,在针对此特定问题的最终解决方案进行大量挖掘之后,将开源jtds驱动程序用于光滑的代码生成器,并将ms jdbc驱动程序用于其余应用程序。这就是生成器代码最终看起来像:

lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map { (dir, cp, r, s) =>
    val outputDir = "app"
    val url = "jdbc:jtds:sqlserver://localhost:1433;databaseName=mydb"
    val jdbcDriver = "net.sourceforge.jtds.jdbc.Driver"
    val slickDriver = "com.typesafe.slick.driver.ms.SQLServerDriver"
    val pkg = "db"
    toError(r.run("scala.slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg, user, pswd), s.log))
    val fname = "Tables.scala"
    Seq(file(fname))
}

答案 1 :(得分:0)

在切线上,对于sbt 0.13.x,建议更改scala.slick.codegen.SourceCodeGenerator - > slick.codegen.SourceCodeGenerator