Может ли компилятор Scala 2.11.12 на JDK11 создать байт-код для целевого jvm11?

#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 .