我有一个使用宏天堂插件的库(称为宏提供程序库).在build.sbt,
addCompilerPlugin("org.scalamacros" % "paradise" % "2.0.0" cross CrossVersion.full)
Run Code Online (Sandbox Code Playgroud)
获取对宏注释的访问权限.
将宏库作为a添加libraryDependency到单独的项目(称为宏消费者项目)时,会出现注释,但永远不会调用宏实现.将宏天堂编译器插件添加到宏消费者项目libraryDependencies可以解决问题.
是否可以将编译器插件作为传递依赖项包含在内?这将使宏库的消费者免于添加所需的插件.
更新#1:
该addCompilerPlugin助手添加依赖于libraryDependencies和设置与依赖configuration = Some("plugin->default(compile)")宏观供应商库中.
在宏提供程序库中添加paradise依赖项libraryDependencies会导致工件显示在宏消费者项目中.它不会将依赖项添加为编译器插件.
更新#2:
autoCompilerPlugins := true与消息更新#1一起在宏消费者项目中进行设置无法解决问题.
我发现解决此问题的唯一方法是添加一个sbt-plugin包含所需设置的子模块。该插件非常基础,
package fixme\n\nimport sbt._\nimport Keys._\n\nobject Plugin extends sbt.Plugin {\n val paradiseVersion = "2.0.0"\n val fixmeVersion = "1.4"\n val fixmeSettings: Seq[Setting[_]] = Seq(\n resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/",\n libraryDependencies <++= (scalaVersion) { v: String \xe2\x87\x92\n (if (v.startsWith("2.10")) List("org.scalamacros" %% "quasiquotes" % paradiseVersion % "compile")\n else Nil) :+\n "org.scala-lang" % "scala-reflect" % v % "compile" :+\n "com.tysonjh" %% "fixme" % fixmeVersion % "compile"\n },\n addCompilerPlugin("org.scalamacros" % "paradise" % paradiseVersion cross CrossVersion.full))\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这可以通过包含在您的project/plugins.sbt,
resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/"\n\naddSbtPlugin("com.tysonjh" % "sbt-fixme" % "1.4")\nRun Code Online (Sandbox Code Playgroud)\n\n和build.sbt文件,
fixmeSettings\nRun Code Online (Sandbox Code Playgroud)\n\nsbt-plugin 设置将宏天堂插件添加为编译器依赖项,并将宏实现添加为库依赖项。
\n