我在$PROJECT/src/main/java
下创建了Java注释(因为我需要运行时保留),而我的scala代码在$PROJECT/src/main/scala
下使用了这些java注释。这样创建的Java注释也使用Java ENUM作为它的值。
如果我编译项目,那么sbt似乎不首先编译Java注释,并且在注释中每次使用枚举时都会出错。如果我在scala代码中的注释中注释掉Java枚举的所有用法并进行编译,取消注释枚举用法并再次编译,则一切正常。
如何在进行干净构建时尝试编译scala代码之前,确保sbt编译我的java注释和枚举(即$PROJECT/src/main/java
)?
答案 0 :(得分:6)
一些好消息:这是a known issue并且已经解决。
一些坏消息:它已在2.10中得到解决,并且修复程序可能无法向后移植到2.9.3(在问题主题中引用Paul Phillips):
我已将此标记为后移,这不是保证;我不 现在有时间做,但我希望在不久的将来。
一些好消息:如果您坚持使用2.10之前的版本,并且您的Java源代码不依赖于您的Scala源代码,you can just add the following就会build.sbt
,并且一切都很顺利:
compileOrder := CompileOrder.JavaThenScala
一些坏消息:如果你被困在2.10之前并且你的Java源代码依赖于你的Scala源代码,我很确定你运气不好,而且注释 - 编译 - 取消注释技巧可能是你的最好的选择。
答案 1 :(得分:0)
我敢打赌你面对SI-2764。这已在Scala 2.10中修复。
同时,为Java注释创建一个单独的子项目,并依赖于包含Scala代码的项目。然后Scala编译器将仅处理.class文件,而是.java文件。