Порядок компиляции ManagedSourceDirectories в проекте Scala/Java при обновлении до Scala 3JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Порядок компиляции ManagedSourceDirectories в проекте Scala/Java при обновлении до Scala 3

Сообщение Anonymous »

Недавно мы обновили Play до версии 3.0.5, на которой установлена ​​Java 21.0.4, версия 1.10.3 и scalaVersion 2.13.14. Все компилируется и работает правильно с этими версиями при запуске sbt clean compile, но в конечном итоге возникают ошибки компилятора scalac, если я меняю scalaVersion на 3.3.3.
Проблема в том, что что есть часть нашей сборки, которая использует наш собственный обработчик аннотаций для создания методов для вызовов DAO и т. д., которыми мы управляем. Вот соответствующая часть нашего build.sbt:

Код: Выделить всё

Compile / compile := (Compile / compile dependsOn Def.task({
(Compile / managedSourceDirectories).value.head.mkdirs()
})).value,
Compile / javacOptions ++= Seq("-s", (Compile / managedSourceDirectories).value.head.getAbsolutePath)
Наш каталог src_managed всегда создается (и пуст), но мы никогда не проходим этап компиляции Scalac, поэтому наши javacOptions фактически никогда не запускаются (поскольку часть javac сборки никогда не вызывается).
Ошибки, которые мы получаем от компилятора scala после запуска sbt clean compile, имеют следующий вид:

Код: Выделить всё

[error] -- [E008] Not Found Error:.../DefaultCompetitionYearResource.java:8:39
[error] 8 |import shared.models.core.querybuilder.CompetitionYearQueryBuilder;
[error]   |                                       ^
[error]   |                  value querybuilder is not a member of shared.models.core
Исходный код queryBuilder обычно находится в нашем каталоге src_managed (и создается нашим обработчиком аннотаций), но по какой-то причине scalac в scala 3.3.3 просматривает наши файлы Java до того, как будут созданы исходные коды src_managed. Нам необходимо сохранить наш compileOrder := CompileOrder.Mixed, поскольку наши файлы scala и Java зависят друг от друга (для обеспечения взаимодействия маршрутов в файлах scala и т. д.).
I пробовали скомпилировать JavaThenScala и ScalaThenJava, но ни один из этих вариантов не работает (поскольку наша смешанная сборка зависит друг от друга). Я также пробовал перейти на другую версию Scala, но все стабильное после 3.3.0 ломается так же. Я ожидал, что будет способ:
  • Скомпилировать наши исходные коды src_managed перед запуском компилятора Scala.
  • Каким-то образом заставить компилятор Scala не просматривать классы Java, связанные с нашими queryBuilder


Подробнее здесь: https://stackoverflow.com/questions/791 ... n-upgradin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»