Порядок компиляции 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.
Проблема в том, что что есть часть нашей сборки, которая использует наш специальный процессор аннотаций (называемый Carbide) для создания методов для вызовов 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)
сканирует наши классы сущностей на наличие аннотации @Entity, а затем рефлексивно создает методы запроса, связанные с членами каждого класса сущностей. Это отдельный проект maven, который мы упаковываем в виде jar в наше приложение/lib.
В scala 3.3.3. наша цель/scala-3.3.3/src_managed/main/ всегда создается (и пуст), но мы никогда не завершаем этап компиляции 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 должен оказаться в нашем каталоге target/scala-3.3.3/src_managed/main/ (и создан нашим обработчиком аннотаций), но по какой-то причине scalac в scala 3.3.3 просматривает наши Java-файлы до того, как будут построены источники src_managed (кажется). Нам необходимо сохранить наш compileOrder := CompileOrder.Mixed, поскольку наши файлы Scala и Java зависят друг от друга (для обеспечения взаимодействия маршрутов в файлах Scala и т. д.).
Это Классы querybuilder обычно создаются после завершения компиляции Scala, но до начала основной компиляции Java. Вот фрагмент журнала отладки успешной компиляции sbt clean с использованием Scala 2.13.14.

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

[debug] Scala compilation took 2.762843833 s
[debug] Attempting to call com.sun.tools.javac.api.JavacTool@2137f8f8 directly...
[info] Annotation processing is enabled because one or more processors were found
[querybuilders are put into src_managed dir]
[info] Carbide warning: Unknown type: com.fasterxml.jackson.databind.JsonNode - skipping field: MasterSurveySchedule.template [These warnings are expected and okay]
[info] Carbide warning: Unknown type: byte[] - skipping field: ResourceBlob.resourceFile
[info] /Users/jludy/shared/app/shared/models/core/UnitTagGroup.java: Recompile with -Xlint:unchecked for details.
[debug] Java compilation took 11.978637459 s
[debug] [zinc] classfile.Parser parsing shared.models.core.querybuilder.support.DefaultAccountResolutionTypeQueryBuilderNode
[classfile.Parser then looks at all our java classses]
....
[debug] Java compilation + analysis took 14.683763333 s
[debug] done compiling
[debug] Registering generated classes:
[debug]     SsoRequireSetting$2.class
[debug]     Exceptions$FillRecursionException.class
[Then the rest are registered]
....

Я пробовал скомпилировать 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»