我正在尝试使用 Maven (3.8.0)创建一个多版本 jar 。我们调用sun.misc.Unsafewhich 在 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手动链接包以使其工作吗?