scala – sbt插件动态加载用户定义的代码?
我是
working on a sbt plugin,在使用
Slick code generator给出数据库的情况下生成Scala模型
我当然希望用户覆盖代码生成器,所以我的插件需要支持这个: >无论如何,我可以动态加载一个Scala类,给出build.sbt插件中的路径吗?例如,在用户的父build.sbt中,她会提供类似codegen.override = com.company.project.CustomCodegenerator的内容,其中包含looks like this 以下是对此的充分讨论:https://github.com/papauschek/play-slick-evolutions-plugin/issues/1 解决方法
在一天结束时,您需要运行一些代码来生成Scala源文件.
生成文件 如您所知,sbt有一个用于生成名为sourceGenerators的源文件的钩子,这在Generating files中有记录. sourceGenerators in Compile += generateModel.taskValue,generateModel := defaultGenerateModel.value,defaultGenerateModel := { ... } 如果您的构建用户想要重新连接generateModel,他或她可以这样做: generateModel := { val file = (sourceManaged in Compile).value / "garfield" / "Foo.scala" IO.write(file,"""case class Foo() {}""") Seq(file) } 如果代码生成包含在sbt插件中,如上所述,则不需要执行任何动态操作.因为play-slick-evolutions-codegen-plugin依赖于slick-codegen,所以这应该不是问题. 动态加载用户代码 由于问题直接在于动态加载用户代码,我也会提出一些指示. >一种方法是使用现有配置中的 鉴于sbt会根据它们之间的依赖关系自动排序任务并且并行运行多个任务,动态执行代码充满了意想不到的危险. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |