代码之家  ›  专栏  ›  技术社区  ›  bramhaag

访问com。太阳工具。javac。来自Java 9的util

  •  18
  • bramhaag  · 技术社区  · 7 年前

    List 来自的类 com.sun.tools.javac.util . 这适用于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 但这并没有解决问题。

    2 回复  |  直到 3 年前
        1
  •  15
  •   Michael    4 年前

    从长远来看,处理这种情况的安全方法是不再使用JDK的这些内部API。

    jdk.compiler 模块的API作为 com.sun.tools.javac 包裹

    system Java compiler 爪哇语 .

    专门针对 com.sun.tools.javac.util.List java.util.List .


    Migration guide 远离的 java.* 声明:-

    使用受支持并用于外部使用的API。

    其中包括:

    • javax.*
    • JDK特定API,一些 com.sun.* 一些 jdk.*

    支持的API可以从JDK中删除,但必须注意。 通过运行 静态分析工具 jdeprscan .

    然后添加到上述突出显示的风险中。。

    编译时间

    封装在JDK 9中的内部API在编译时不可访问,但可以通过 --add-exports 命令行选项。

    --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
    

    在运行时,如果它们在JDK 8中,它们仍然可以访问,但在未来的版本中,它们将变得不可访问,这时 --添加导出 --add-opens 选项也可以用于在运行时访问它们。

        2
  •  -5
  •   Sampath Kumar    3 年前

    格拉德尔。设置以下参数可能会有所帮助

    org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
    kotlin.code.style=official