4

Java アノテーションを (実行時の保持が必要なため) の下$PROJECT/src/main/javaに作成し、これらの Java アノテーションを使用する scala コードを の下に作成し$PROJECT/src/main/scalaました。このようにして作成された Java アノテーションは、値として Java ENUM も使用します。

プロジェクトをコンパイルすると、sbt は最初に Java アノテーションをコンパイルしないようで、アノテーションで列挙型を使用するたびにエラーが発生します。scala コードの注釈で Java 列挙型のすべての使用をコメント アウトしてコンパイルを実行すると、列挙型の使用のコメントを解除して再度コンパイルすると、すべて正常に動作します。

$PROJECT/src/main/javaクリーン ビルドを実行するときに、scala コードをコンパイルしようとする前に、sbt が 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ソースに依存している場合は、運が悪いと確信しています。comment-compile-uncommentトリックがおそらく最善の策です。

于 2012-07-15T17:59:41.727 に答える
0

きっとあなたはSI-2764に直面しているでしょう。これは Scala 2.10 で修正されました。

それまでの間、Java アノテーション用に別個のサブプロジェクトを作成し、Scala コードを含むプロジェクトからこれに依存してください。そうすれば、Scala コンパイラーは.java ファイルではなく、.class ファイルのみを処理します。

于 2012-07-16T05:21:50.460 に答える