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