4

我已经创建了 Java 注释(因为我需要运行时保留),$PROJECT/src/main/java而我的 scala 代码在$PROJECT/src/main/scala. 这样创建的 Java 注释也使用 Java ENUM 作为它的值。

如果我编译该项目,那么 sbt 似乎不会首先编译 Java 注释,并且在注释中每次使用枚举时都会出错。如果我在scala代码的注释中注释掉Java枚举的所有用法并进行编译,取消注释枚举用法并再次编译它一切正常。

在进行干净构建时,如何确保 sbt$PROJECT/src/main/java在尝试编译 scala 代码之前编译我的 java 注释和枚举(即)?

编辑:我有一个简单的 build.sbt 并且正在使用 sbt 0.11.2

4

2 回答 2

6

一些好消息:这是一个已知问题并已解决。

一些坏消息:它已在 2.10 中解决,并且该修复可能不会被向后移植到 2.9.3(在问题线程中引用 Paul Phillips):

我已将此标记为向后移植,这不是保证;我现在没有时间做,但我希望在不久的将来。

一些好消息:如果您坚持使用 2.10 之前的版本并且您的 Java 源代码不依赖于您的 Scala 源代码,您可以将以下内容添加到您的build.sbt并且一切都很好:

compileOrder := CompileOrder.JavaThenScala

一些坏消息:如果您停留在 2.10 之前的版本并且您的 Java 源代码确实依赖于您的 Scala 源代码,那么我很确定您不走运,并且注释-编译-取消注释技巧可能是您最好的选择。

于 2012-07-15T17:59:41.727 回答
0

我敢打赌你面对的是SI-2764。这已在 Scala 2.10 中修复。

同时,为您的 Java 注释创建一个单独的子项目,并依赖于包含 Scala 代码的项目。然后 Scala 编译器将处理 .class 文件,而不是 .java 文件。

于 2012-07-16T05:21:50.460 回答