Я пытаюсь создать банку multi-release с Maven (3.8.0).Мы называем sun.misc.Unsafe
, который прекрасно компилируется в java8 и java11.Однако при компиляции с java11 --release 8
возникает Compilation failure: package sun.misc does not exist
.
. Вот как воспроизвести ошибку:
Простой класс, который вызывает Unsafe
:
public class ChangeableObjects {
sun.misc.Unsafe unsafe;
}
Простой pom:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
</plugins>
</build>
Если мы прокомментируем строку <release>8</release>
, она отлично работает на java8 и java11.
Если мы скомпилируем код как есть, он завершится неудачнос java8;это нормально, так как это функция java9 .Проблема в том, что он также не работает с java11.
Я предполагаю, что проблема в том, что пакет sun.misc
был перемещен между java8 и java9.Но все же цель флага release
состоит в том, что код, который хорошо компилируется с java8, должен также хорошо компилироваться с java11.
Я неправильно понимаю, как использовать флаг release
?Нужно ли вручную связывать пакет sun.misc
, чтобы он работал?