我试图在我的项目中使用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)
Run Code Online (Sandbox Code Playgroud)
任何想法我应该怎么做呢?
好吧,该消息清楚地显示(实际上注意到JDK开发人员的" 内部 "意味着他们不想公开它们的漂亮命名约定)您尝试访问的API是在不导出到任何其他的包中模块除了这些 -
exports jdk.internal.joptsimple to jdk.jlink, jdk.jshell
Run Code Online (Sandbox Code Playgroud)
即使你requires jdk.internal.opt在声明中添加模块.
应避免使用这些包中的类.
此外,即使Open JDK本身也集成了JOpt Simple,供JDK工具内部使用. 我建议您使用库jopt-simple来获得长期解决方案,方法是使用以下方法添加对模块路径(java9)或类路径(java8)的依赖关系.
Maven -
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
<version>6.0-alpha-2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
摇篮: -
compile 'net.sf.jopt-simple:jopt-simple:6.0-alpha-2'
Run Code Online (Sandbox Code Playgroud)
在包含之后,您的类中使用的包名称应该只是joptsimple.*代替.jdk.internal.joptsimple.*
您显然正在使用内部 API,您不应该这样做。此类 API 未标准化 - 它们可能因 JVM 而异,并且可能随时更改,恕不另行通知。
也就是说,如果您仍然想使用它,您可以通过在编译和运行时(即 tojavac和java)添加以下命令行标志来实现:
--add-exports jdk.internal.opt/jdk.internal.joptsimple=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
如果您正在创建一个模块,您必须用ALL-UNNAMED您的模块名称替换。
| 归档时间: |
|
| 查看次数: |
5321 次 |
| 最近记录: |