scala – 将任务添加到sbt 13.x build.sbt
我已将此添加到build.sbt
libraryDependencies += "com.typesafe.slick" %% "slick-codegen" % "2.1.0" lazy val slickGenerate = TaskKey[Seq[File]]("slick code generation") slickGenerate <<= slickGenerateTask lazy val slickGenerateTask = { (sourceManaged in Compile,dependencyClasspath in Compile,runner in Compile,streams) map { (dir,cp,r,s) => val dbName = "dbname" val userName = "user" val password = "password" val url = s"jdbc:mysql://server:port/$dbName" val jdbcDriver = "com.mysql.jdbc.Driver" val slickDriver = "scala.slick.driver.MySQLDriver" val targetPackageName = "models" val outputDir = (dir / dbName).getPath // place generated files in sbt's managed sources folder val fname = outputDir + s"/$targetPackageName/Tables.scala" println(s"nauto-generating slick source for database schema at $url...") println(s"output source file file: file://$fnamen") r.run("scala.slick.codegen.SourceCodeGenerator",cp.files,Array(slickDriver,jdbcDriver,url,outputDir,targetPackageName,userName,password),s.log) Seq(file(fname)) } } 任务的代码本身并不是很令人兴奋.它只需要创建一个自动生成的scala源文件.问题是,sbt开始很好,但是这个新任务显然不被sbt识别,不能在sbt提示符下运行.对于任务定义的:=语法,我也很幸运.现有文档只是令人困惑. 如何在sbt提示符中提供此新任务? 解决方法
这有效
libraryDependencies += "com.typesafe.slick" %% "slick-codegen" % "2.1.0" lazy val slickGenerate = taskKey[Seq[File]]("slick code generation") slickGenerate := { val dbName = "dbname" val userName = "user" val password = "password" val url = s"jdbc:mysql://server:port/$dbName" val jdbcDriver = "com.mysql.jdbc.Driver" val slickDriver = "scala.slick.driver.MySQLDriver" val targetPackageName = "models" val outputDir = ((sourceManaged in Compile).value / dbName).getPath // place generated files in sbt's managed sources folder val fname = outputDir + s"/$targetPackageName/Tables.scala" println(s"nauto-generating slick source for database schema at $url...") println(s"output source file file: file://$fnamen") (runner in Compile).value.run("scala.slick.codegen.SourceCodeGenerator",(dependencyClasspath in Compile).value.files,streams.value.log) Seq(file(fname)) } 在sbt 0.13.x你不需要所有那些blabla map sameblabla样板.只需按原样访问值(编译中的运行符).value – 宏将为您完成所有其他操作. > slickGenerate [info] Updating {file:/Users/user/slick/}slick... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. auto-generating slick source for database schema at jdbc:mysql://server:port/dbname... output source file file: file:///Users/user/slick/target/scala-2.10/src_managed/main/dbname/models/Tables.scala > help slickGenerate slick code generation 谈论<< = - 您的TaskKey不正确,请参阅定义: def apply[T](label : scala.Predef.String,description : scala.Predef.String // not description 因此,旧的定义<< =使用“生成光滑的代码”作为标签,而new:=使用代码给定的命令名称(新样式),因此它使用“生成光滑的代码”作为文档.这看起来很奇怪且不一致,但这是事实,而且部分原因是向后兼容性. 所以,正确的旧式版本是: import sbt.Keys._ lazy val slickGenerate = TaskKey[Seq[File]]("slick-generate","generate slick code") slickGenerate <<= slickGenerateTask def slickGenerateTask = (sourceManaged in Compile,s) => ... } 它的工作方式与之前相同.注意,你必须使用“slickGenerate”而不是“slick-generate”,最后一个不能用于“help”命令. 顺便说一句,你现在正在使用Bare build definition – 你可能希望切换到Multi-project .sbt definition,因为它是由sbt docs,see also推荐的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- scala – 拉出具有依赖关系的无形多态函数
- angularjs – 为什么ace编辑器加载所有文本突出显示以及如何
- angular.js video.js directive
- bash – 如何等到Kubernetes为LoadBalancer服务分配外部IP?
- angularjs – 使用ng模型检查的无线电按钮
- angular 4 unit testing error`TypeError:ctor不是构造函数
- 彻底理解webservice SOAP WSDL
- angular2无法解析’RequestOptions’的所有参数(?)
- unix – 检查命令行中音频文件的持续时间
- MySQL InnoDB Cluster环境搭建和简单测试