Компиляция аннотаций Java с помощью sbt
Я создал аннотации Java (так как мне нужно сохранение времени выполнения) под $PROJECT/src/main/java
и мой код Scala, который использует эти аннотации Java под нами $PROJECT/src/main/scala
, Созданная таким образом аннотация Java также использует Java ENUM в качестве значения.
Если я скомпилирую проект, то sbt, похоже, не будет сначала компилировать аннотации Java и выдает ошибки при каждом использовании перечисления в аннотациях. Если я закомментирую все случаи использования перечисления Java в аннотациях в коде scala и произвожу компиляцию, раскомментирую использование перечисления и снова скомпилирую, все работает нормально.
Как мне убедиться, что sbt компилирует мои java-аннотации и enum (т.е. $PROJECT/src/main/java
) прежде чем пытаться скомпилировать scala-код при выполнении чистой сборки?
РЕДАКТИРОВАТЬ: у меня есть голые buildsb.sbt и я использую sbt 0.11.2
2 ответа
Некоторые хорошие новости: это известная проблема, которая была решена.
Некоторые плохие новости: это исправлено в 2.10, и исправление не может быть перенесено в 2.9.3 (цитируя Пола Филлипса в теме выпуска):
Я отметил это для бэкпорта, что не является гарантией; У меня нет времени, чтобы сделать это прямо сейчас, но я ожидаю в ближайшем будущем.
Некоторые хорошие новости: если вы застряли на pre-2.10 и ваши исходные коды Java не зависят от исходных текстов Scala, вы можете просто добавить следующее в свой build.sbt
и все хорошо
compileOrder := CompileOrder.JavaThenScala
Некоторые плохие новости: если вы застряли на pre-2.10 и ваши исходники Java зависят от ваших исходных кодов Scala, я уверен, что вам не повезло, и трюк с комментариями, компиляцией и комментариями, вероятно, является лучшим выбором.
Могу поспорить, вы столкнулись с SI-2764. Это было исправлено в Scala 2.10.
Тем временем создайте отдельный подпроект для своих аннотаций Java и зависит от этого от проекта, содержащего код Scala. Тогда компилятор Scala будет обрабатывать только файлы.class, а не файлы.java.