我有以下问题:我有我的播放应用程序,我们称之为 PlayApp。在这个 Play 应用程序中,我创建了子项目(在 playApp 中的 dir /MyLib 中),我们称之为 MyLib。这个 MyLib 项目有一些带有类注释的宏。我想在 PlayApp 中使用该注释。所以我创建了这个 MyLib,我让 PlayApp 依赖于 MyLib。一切正常。这是我的 PlayApp/build.sbt
...
addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0-M5" cross CrossVersion.full)
lazy val root = (project in file(".")).enablePlugins(PlayScala).aggregate(MyLib).dependsOn(MyLib)
lazy val MyLib = project
...
我知道 PlayApp 应该依赖于 MyLib,它应该在另一个编译运行中编译。但我想从这个 MyLib 项目中制作 jar。所以我做到了
sbt assembly
在 /MyLib 中,然后我将 jar 放在项目的 /lib 中。一切看起来都很好,我可以看到从 MyLib.jar 编译的类,但出现编译错误:
编译错误
无法扩展宏注解(最常见的原因是您需要启用宏天堂插件;另一种可能是您尝试在定义它的同一编译运行中使用宏注解)
这是我熟悉的错误。这看起来像是 play 尝试在与 PlayApp 相同的编译运行中编译宏。有人知道解决方案吗?
编辑:
我找到了这个。我在我想使用它的项目类中双重导入了我的宏注释......你通常将你的库打包到 jar 中,将它放在 Play 应用程序的 /lib 中,然后在 build.sbt 中添加这个编译器插件。我的错误与该程序无关。仔细检查导入,这是查看此编译错误的另一种可能性。