如何在 java11 中使用 jdk.internal.misc.Signal
how to use jdk.internal.misc.Signal in java11
我有一个使用 jdk.internal.misc.Signal
的 class。
在 module-info.java
中有 requires jdk.unsupported
。
如果我尝试编译它,我会得到:
[ERROR] MyClass.java:[28,20] package jdk.internal.misc is not visible
[ERROR] (package jdk.internal.misc is declared in module java.base, which does not export it to module MyModule)
然后如果我添加 <arg>--add-exports</arg><arg>java.base/jdk.internal.misc=MyModule</arg>
到 maven-compiler-plugin:3.8.1 我得到:
[ERROR] exporting a package from system module java.base is not allowed with --release
然后如果我删除 <release>11</release>
我得到:
Fatal error compiling: warning: source release 11 requires target release 11
我觉得我遗漏了一些重要的东西,或者这可能只是一个错误?
我正在使用 maven 3.6.3 和 openjdk 11.0.2.
通过将我的 pom.xml
中的 <release>11</release>
更改为 <target>11</target>
来修复:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
jdk.internal.misc.Signal
在 java.base
模块中。如果您查看它的 module-info.java
文件,您会注意到:
exports jdk.internal.misc to
(...)
jdk.unsupported;
但是 jdk.unsupported
包含 sun.misc.Signal
,这是用于处理信号的原始 Java 9 class。
通常在 .internal.
包中使用 classes 是一种不好的做法,因为它们不是 public API.
的一部分
相反,我建议将 sun.misc.Signal
与 requires jdk.unsupported
模块子句一起使用,直到有一个 @Deprecated
注释包含应该使用 API 的信息。
顺便说一句。这是 JPMS 如何帮助从 un/intended 用法中隐藏库(在本例中 JDK)的内部实现细节的一个很好的例子。
我有一个使用 jdk.internal.misc.Signal
的 class。
在 module-info.java
中有 requires jdk.unsupported
。
如果我尝试编译它,我会得到:
[ERROR] MyClass.java:[28,20] package jdk.internal.misc is not visible
[ERROR] (package jdk.internal.misc is declared in module java.base, which does not export it to module MyModule)
然后如果我添加 <arg>--add-exports</arg><arg>java.base/jdk.internal.misc=MyModule</arg>
到 maven-compiler-plugin:3.8.1 我得到:
[ERROR] exporting a package from system module java.base is not allowed with --release
然后如果我删除 <release>11</release>
我得到:
Fatal error compiling: warning: source release 11 requires target release 11
我觉得我遗漏了一些重要的东西,或者这可能只是一个错误? 我正在使用 maven 3.6.3 和 openjdk 11.0.2.
通过将我的 pom.xml
中的 <release>11</release>
更改为 <target>11</target>
来修复:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
jdk.internal.misc.Signal
在 java.base
模块中。如果您查看它的 module-info.java
文件,您会注意到:
exports jdk.internal.misc to
(...)
jdk.unsupported;
但是 jdk.unsupported
包含 sun.misc.Signal
,这是用于处理信号的原始 Java 9 class。
通常在 .internal.
包中使用 classes 是一种不好的做法,因为它们不是 public API.
相反,我建议将 sun.misc.Signal
与 requires jdk.unsupported
模块子句一起使用,直到有一个 @Deprecated
注释包含应该使用 API 的信息。
顺便说一句。这是 JPMS 如何帮助从 un/intended 用法中隐藏库(在本例中 JDK)的内部实现细节的一个很好的例子。