从 Java 访问 com.sun.tools.javac.util 9
Accessing com.sun.tools.javac.util from Java 9
我正在尝试从 com.sun.tools.javac.util
访问 List
class。这适用于 Java 8,但是当切换到 Java 9 时,我收到以下错误:Package 'com.sun.tools.javac.util' is declared in module "jdk.compiler", which does not export it to the unnamed module"
.
我尝试将 requires jdk.compiler;
添加到我的 module-info
文件中,但这并没有解决问题。
在较长的 运行 中,处理这种情况的安全方法是不再使用 JDK.
的这些内部 API
可以使用 jdk.compiler
module's APIs as a replacement to the com.sun.tools.javac
包。
Defines the implementation of the system Java compiler and its command
line equivalent, javac, as well as javah.
具体针对com.sun.tools.javac.util.List
,其几乎所有非重写的自定义方法都可以派生自基于接口的实现java.util.List
.
Migration guide 关于 删除的 java.*
API 的专栏 指出 -
The Java team is committed to backward compatibility. If an
application runs in JDK 8, then it will run on JDK 9 as long as it
uses APIs that are supported and intended for external use.
These include:
- JCP standard,
java.*
, javax.*
- JDK-specific APIs, some
com.sun.*
, some jdk.*
Supported APIs can be removed from the JDK, but only with notice. Find out if your code is using deprecated APIs by running
the static analysis tool jdeprscan
.
然后添加到上面突出显示的风险..
编译时间
封装在 JDK9 中的内部 API 在编译时不可访问,但可以在编译时通过 --add-exports
命令行选项访问。
你的情况:
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
运行时间
在 运行 时,如果它们在 JDK 8 中,它们仍然可以访问,但在将来的版本中,它们将变得不可访问,此时 --add-exports
或 --add-opens
选项也可用于使它们在 运行 时也可访问。
gradle.settings 使用以下参数可能会有帮助
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
我正在尝试从 com.sun.tools.javac.util
访问 List
class。这适用于 Java 8,但是当切换到 Java 9 时,我收到以下错误:Package 'com.sun.tools.javac.util' is declared in module "jdk.compiler", which does not export it to the unnamed module"
.
我尝试将 requires jdk.compiler;
添加到我的 module-info
文件中,但这并没有解决问题。
在较长的 运行 中,处理这种情况的安全方法是不再使用 JDK.
的这些内部 API可以使用 jdk.compiler
module's APIs as a replacement to the com.sun.tools.javac
包。
Defines the implementation of the system Java compiler and its command line equivalent, javac, as well as javah.
具体针对com.sun.tools.javac.util.List
,其几乎所有非重写的自定义方法都可以派生自基于接口的实现java.util.List
.
Migration guide 关于 删除的 java.*
API 的专栏 指出 -
The Java team is committed to backward compatibility. If an application runs in JDK 8, then it will run on JDK 9 as long as it uses APIs that are supported and intended for external use.
These include:
- JCP standard,
java.*
,javax.*
- JDK-specific APIs, some
com.sun.*
, somejdk.*
Supported APIs can be removed from the JDK, but only with notice. Find out if your code is using deprecated APIs by running the static analysis tool
jdeprscan
.
然后添加到上面突出显示的风险..
编译时间
封装在 JDK9 中的内部 API 在编译时不可访问,但可以在编译时通过 --add-exports
命令行选项访问。
你的情况:
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
运行时间
在 运行 时,如果它们在 JDK 8 中,它们仍然可以访问,但在将来的版本中,它们将变得不可访问,此时 --add-exports
或 --add-opens
选项也可用于使它们在 运行 时也可访问。
gradle.settings 使用以下参数可能会有帮助
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official