包不可见错误

Package is not visible error

我试图在我的项目中使用 joptsimple 包,但出现以下错误:

Error:(4, 20) java: package jdk.internal.joptsimple is not visible
  (package jdk.internal.joptsimple is declared in module jdk.internal.opt, which does not export it to the unnamed module)

我应该用它做什么?

您显然在使用内部 API,您不应该这样做。此类 API 未标准化 - 它们可能因 JVM 而异,并且可能随时更改,恕不另行通知。

也就是说,如果您仍想使用它,可以通过在编译和 运行 时添加以下命令行标志(即 javacjava ):

--add-exports jdk.internal.opt/jdk.internal.joptsimple=ALL-UNNAMED

如果您要创建模块,则必须将 ALL-UNNAMED 替换为您的模块名称。

好吧,消息清楚地显示(实际上请注意 JDK 开发人员的漂亮命名约定“internal”,这意味着他们不想公开它们)您尝试访问的 API 位于一个包中,该包未导出到除这些以外的任何其他模块 -

exports jdk.internal.joptsimple to jdk.jlink, jdk.jshell

即使您在声明中添加 requires jdk.internal.opt 模块。


应避免使用这些包中的 类。

此外,即使 Open JDK itself integrates JOpt Simple for internal usage by JDK tools. I would suggest you make use of the library jopt-simple 通过添加对模块路径(java9)或类路径(java8) 使用 -

行家 -

<dependency>
    <groupId>net.sf.jopt-simple</groupId>
    <artifactId>jopt-simple</artifactId>
    <version>6.0-alpha-2</version>
</dependency>

Gradle:-

compile 'net.sf.jopt-simple:jopt-simple:6.0-alpha-2'

在你的 类 中使用的包名称包含后应该简单地是 joptsimple.* 而不是 jdk.internal.joptsimple.*.