#java #scala #apache-spark #bytecode #java-11
Вопрос:
У меня есть проект, который использует java 8 и scala 2.11.12 и зависит от spark 2.4.2. Мне нужно скомпилировать и запустить этот проект с помощью jdk11 (версия Java: 11.0.12, поставщик: Eclipse Foundation), моей конфигурации плагина scala-maven:
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.0.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
<goal>add-source</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-target:jvm-1.8</arg>
</args>
</configuration>
</plugin>
Если я скомпилирую и запущу его без каких-либо изменений, просто используя jdk11, я получу байт-код версии 52. Почти все в порядке и работает. Просто нужно переопределить библиотеку xbean-asm6 с новой версией-4.10, потому что старая версия (в комплекте с spark) каким — то образом находит байт-код 55 и создает исключение.
Когда я меняю цель на-цель:jvm-1.11 или-цель:jvm-11, я получаю ошибку:
[ERROR] 'jvm-1.11' is not a valid choice for '-target'
[ERROR] bad option: '-target:jvm-1.11'
Итак, возникает вопрос:
Может ли компилятор scala 2.11.12 или 2.12.14 создать цель jdk11?
Комментарии:
1. Согласно матрице совместимости JDK , обе версии компилятора должны быть совместимы с JDK 11.
2. @Христоилев Я видел эту матрицу. Теперь я могу скомпилировать свой код с помощью JDK11 и запустить его на JRE8 — байт-код версии 52. Но я не могу понять, почему я не могу скомпилировать свой код с помощью JDK11 для целевой jvm-11, чтобы получить байт-код версии 55 (несовместимый с JRE8).
3. Spark v2.4.2 не будет работать на JDK 11. Вам нужна Spark v3 .