如何从本地路径包含Scala编译器插件?

时间:2019-02-12 23:16:27

标签: scala sbt

我正在开发一个Scala编译器插件,现在我必须去插件项目,运行sbt publishLocal,回到我的项目,然后运行sbt clean compile

这是因为我在build.sbt中使用了addCompilerPlugin(...)

我想知道是否有一种方法可以引用编译器插件的本地路径,以便我可以简单地运行sbt compile

谢谢。

1 个答案:

答案 0 :(得分:0)

这是我们可以实现的方式:

scalacOptions in Compile ++= {
  val jar = (Keys.`package` in (plugin, Compile)).value
  System.setProperty("sbt.paths.plugin.jar", jar.getAbsolutePath)

  val addPlugin = "-Xplugin:" + jar.getAbsolutePath
  // Thanks Jason for this cool idea (taken from https://github.com/retronym/boxer)
  // add plugin timestamp to compiler options to trigger recompile of
  // main after editing the plugin. (Otherwise a 'clean' is needed in the current project)
  val dummy = "-Jdummy=" + jar.lastModified
  Seq(addPlugin, dummy)
}

下面是一个示例:https://github.com/GIVESocialMovement/scala-named-argument-compiler-plugin/blob/master/test-project/build.sbt#L26

以上操作在插件项目上运行package,获取其jar,然后通过当前项目上的scalacOptions添加插件。

感谢这位Redditor回答了我的问题:https://www.reddit.com/r/scala/comments/aq2bt6/just_made_a_compiler_plugin_to_enforce_named/