Я играю с некоторыми зависимостями и компиляцией в более старые выпуски с использованием java 11. Я перенес одну зависимость на Java 11 и работает нормально, но нам все еще нужно запустить Tomcat 7 или 8 на Java8. Можно ли использовать флаг --release
для компиляции кода, который использует var
, stream().dropwhile(...)
или Map.of(...)
и работает на 8?
Флаг выпуска предполагает, что это должно быть возможно:
--release release Компилируется с общедоступным, поддерживаемым и документированным API для конкретной версии виртуальной машины. Поддерживаемые цели выпуска: 6, 7, 8 и 9.
Этот проект является зависимым, автономно работает нормально с SprinBoot2.1 и Java11, но должен быть запущен в Java8.
Мои настройки компилятора плагина maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
но это запрещает компилировать> специфический код jdk8. Я использую последний Maven 3.6.0 и компилятор MVN, как указано выше.
Попытка скомпилировать:
return List.of("dsadas", "dasdadddds", "£dsada", "dasdas")
.stream()
.dropWhile(s -> s.contains("das"))
.collect(Collectors.toList());
выдает ошибку:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project api: Compilation failure: Compilation failure:
[ERROR] /home/agilob/Projects/.....java:[58,13] cannot find symbol
[ERROR] symbol: class var
[ERROR] location:
[ERROR] /home/agilob/Projects/....java:[43,20] cannot find symbol
[ERROR] symbol: method of(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
[ERROR] location: interface java.util.List
[ERROR] -> [Help 1]