OLP CLI 错误:java.base 未将 sun.security.util 导出到 JDK 16 下的未命名模块

2024-01-29

在 MacOS Big Sur (11.4)、最新的 OLP (10.0.9) 和最新的 Java (16.0.1) 下,在 akka 中遇到“olp 目录列表”错误。如果切换到 Java 8,相同的命令也可以工作,但这不是重点。根据用户指南 Java 16 应该没问题:

OLP CLI 需要 Java 运行时环境 (JRE) 版本 1.8.0_91 或更高版本。

Error:

$ java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9-24)
OpenJDK 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)

$ olp version show
Version: 10.0.9(727ba090)

$ olp api token get
Token: <XXX>
Token Expires at: 2021-07-03T03:01:21.455Z

$ olp catalog list --profile default
Uncaught error from thread [olp-akka.actor.default-dispatcher-3]: class com.typesafe.sslconfig.ssl.DefaultHostnameVerifier (in unnamed module @0x71e7a66b) cannot access class sun.security.util.HostnameChecker (in module java.base) because module java.base does not export sun.security.util to unnamed module @0x71e7a66b, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[olp]
java.lang.IllegalAccessError: class com.typesafe.sslconfig.ssl.DefaultHostnameVerifier (in unnamed module @0x71e7a66b) cannot access class sun.security.util.HostnameChecker (in module java.base) because module java.base does not export sun.security.util to unnamed module @0x71e7a66b
        at com.typesafe.sslconfig.ssl.DefaultHostnameVerifier.hostnameChecker(DefaultHostnameVerifier.scala:38)
        at com.typesafe.sslconfig.ssl.DefaultHostnameVerifier.matchCertificates(DefaultHostnameVerifier.scala:77)
        at com.typesafe.sslconfig.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.scala:51)
        at akka.stream.scaladsl.TLS$.$anonfun$apply$3(TLS.scala:116)
        at akka.stream.impl.io.TLSActor.handshakeFinished(TLSActor.scala:436)
        at akka.stream.impl.io.TLSActor.doUnwrap(TLSActor.scala:399)
        at akka.stream.impl.io.TLSActor.doInbound(TLSActor.scala:295)
        at akka.stream.impl.io.TLSActor.$anonfun$bidirectional$1(TLSActor.scala:230)
        at akka.stream.impl.Pump.pump(Transfer.scala:202)
        at akka.stream.impl.Pump.pump$(Transfer.scala:200)
        at akka.stream.impl.io.TLSActor.pump(TLSActor.scala:50)
        at akka.stream.impl.BatchingInputBuffer.enqueueInputElement(ActorProcessor.scala:96)
        at akka.stream.impl.BatchingInputBuffer$$anonfun$upstreamRunning$1.applyOrElse(ActorProcessor.scala:147)
        at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:38)
        at akka.stream.impl.SubReceive.apply(Transfer.scala:18)
        at akka.stream.impl.FanIn$InputBunch$$anonfun$subreceive$1.applyOrElse(FanIn.scala:242)
        at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:38)
        at akka.stream.impl.SubReceive.apply(Transfer.scala:18)
        at akka.stream.impl.SubReceive.apply(Transfer.scala:14)
        at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)
        at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)
        at akka.stream.impl.SubReceive.applyOrElse(Transfer.scala:14)
        at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:175)
        at akka.actor.Actor.aroundReceive(Actor.scala:539)
        at akka.actor.Actor.aroundReceive$(Actor.scala:537)
        at akka.stream.impl.io.TLSActor.aroundReceive(TLSActor.scala:50)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:614)
        at akka.actor.ActorCell.invoke(ActorCell.scala:583)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:268)
        at akka.dispatch.Mailbox.run(Mailbox.scala:229)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:831)

Update

该问题已得到解决。从 10.0.36 开始的新版本 CLI 可与 JDK 16 正常工作。

从这里下载:https://platform.here.com/sdk/cli https://platform.here.com/sdk/cli

根本原因

一些工具和库使用反射来访问 JDK 中仅供内部使用的部分。这称为非法反射访问,默认情况下在 JDK 16 及更高版本中是不允许的。

默认情况下,使用早期 Java 版本编译的直接访问 JDK 内部 API 的代码不起作用。

java 启动器选项--illegal-access控制宽松的强封装。该选项的默认值为--illegal-access=deny,禁用非法访问操作。

因此,使用 SDK 16 的 CLI 中与目录相关的命令失败的问题是sun.security.*自 JDK 16 起,内部 API 不可用。

下面是包含内部 API 的表,该表在 JDK 16 中不起作用:https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool

默认情况下强封装JDK内部:https://openjdk.java.net/jeps/396 https://openjdk.java.net/jeps/396

OLP文档指出,当使用Java 8以上时,可能会出现这样的错误:https://developer.here.com/documentation/java-scala-dev/dev_guide/topics/configure-your-environment.html https://developer.here.com/documentation/java-scala-dev/dev_guide/topics/configure-your-environment.html

解决方法

作为解决方法,您可以添加环境变量,

 export _JAVA_OPTIONS="--add-opens=java.base/sun.security.util=ALL-UNNAMED"

or

 export _JAVA_OPTIONS="--illegal-access=permit" (this parameter is deprecated)

然后所有命令都应该正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OLP CLI 错误:java.base 未将 sun.security.util 导出到 JDK 16 下的未命名模块 的相关文章

  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • Jframe 内有 2 个 Jdialogs 的 setModal 问题

    当我设置第一个选项时 我遇到了问题JDialog模态 第二个非模态 这是我正在尝试实现的功能 单击 测试对话框 按钮 一个JDialog有名字自定义对话框 主要的将会打开 如果单击 是 选项自定义对话框主 其他JDialog named 自
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • 向 GUI 添加标签和文本框控件

    我想知道要插入什么代码以及在哪里添加一个简单的标签 只能说 标签 和一个可以输入数字的输入文本框 public CalculateDimensions JTabbedPane Tab new JTabbedPane JPanel jplIn
  • nodejs mysql 多个where查询

    我在nodejs中使用mysql已经有一段时间了 我似乎不知道如何使用多个where语句的查询 喜欢 SELECT FROM user information WHERE a a 或 b b 现在我有这个作为我的代码 connection
  • React-Table:如果用鼠标单击(选择)行,如何更改行的背景颜色?

    我有以下代码用于检索单击行的数据
  • 嵌套父/子复选框 - 工作解决方案需要 Bootstrap 的调整帮助

    我一直在寻找一个 完整 的解决方案来嵌套父子复选框 根据层次结构正确更改状态 大多数 解决方案 不起作用或只能在一定程度上起作用 它们还要求您以特定方式命名复选框 This https stackoverflow com questions
  • 如何让 Android 图标改变状态(突出显示)?

    我正在小部件中使用 Android SDK 图标按钮进行刷新 ic menu refresh 并且我需要在按下该按钮时更改选择状态 这是怎么做到的 我是否为按钮定义 XML 您可以通过选择器在 xml 中定义不同的状态 示例 尤其是查看状态
  • Yeoman 和 ExpressJS

    我想知道是否有一些样板代码可以使用像 Yeoman 这样的前端工作流工具和像 ExpressJS 这样的后端框架 如果我想为前端和后端维护相同的代码库 基本上我想知道 yeoman 和express 生成的样板代码如何组合在一起 有没有办法
  • html 列的宽度根据其内容自动改变

    我创建了包含 3 列的动态 HTML 页面 每列可以包含可变数量的文本 从 0 到 1000 个单词 我希望 3 列中的文本看起来高度大致相同 因此 我希望列宽根据其包含的文本量自动更改 在 HTML 中 当每个单元格都有一个文本 div
  • ListView 和 ListView 内的按钮

    我想显示一个Button在 的里面ListView 目标应该是点击ListView线或按钮上 单击显示更多信息的行 单击底部显示更多按钮的按钮 与 GMAIL 应用程序相同 右侧有一个复选框 单击底部的复选框后 会出现按钮栏 我的问题是在将
  • 使用省略号重塑 numpy 数组的问题

    我正在尝试为项目复制以下批处理生成器 但是我在重塑数据时遇到问题 该函数的目标是获取 6000 3000 数组并将其重塑为 batch size 100 3000 1 我正在尝试复制的功能代码 def gen dict files aug
  • jUnit 4 中的 TestSuite 设置

    我已经设法找到如何在 jUnit 4 中制作 TestSuite 但我真的很怀念在 TestSetup 中包装套件的 v3 可能性 关于如何为 jUnit 4 中的一组测试用例执行一些 BeforeClass AfterClass 设置 有
  • 更改按钮锚点 SwiftUI

    我正在尝试更改确定按钮中心的锚点 以下代码将按钮放置在框架的左上角 Button action print self note Text note position x 0 0 y 0 0 如果我使用 offset 代替 那么它就会起作用
  • 空手道——并行执行失败[重复]

    这个问题在这里已经有答案了 我观察到 当我使用 Runner parallel getClass 1 在 Maven 构建中运行测试 功能文件 时它工作正常 但是当我增加像 Runner parallel getClass 5 这样的线程数
  • 邪恶巫师动态步骤顺序

    我正在尝试根据先前选择的选择来更改邪恶向导中的步骤顺序 所以目前我已经完成了所有步骤 class WWTestController lt ApplicationController include Wicked Wizard steps f
  • 如何让 Visual Studio 在没有警告的情况下处理 HTML 5 标签

    我有各种 html 标签 与 jquery mobile 相关 Visual Studio 将其标记为无效属性 例如 div 其中包括 Validation XHTML 1 0 Transitional Attribute data rol
  • 安装 Virtualenv 并激活 virtualenv 不起作用

    我从 Github 帐户克隆了我的 Django 项目 并使用著名的命令激活了 virtualenvsource nameofenv bin activate当我跑步时python manage py runserver 它给了我一个错误
  • 访问通过 window.open 方法检索的 Document 元素

    我想根据提供的网址弹出一个新的浏览器 为此我使用 javascript 的 window open 函数 但是 我真正想要的是检查弹出的新窗口并更改它的 url 并重定向到另一个站点 这就是我尝试做的方法
  • 使用 php include 标题、导航和其他元素时的良好做法?

    我不知道专业的网页设计师通常如何分隔这些元素 像这样 或者就像这样 或者只是将我想要重复的所有元素放在一起 我应该在这些元素中使用 php 或 html 扩展吗 头部 导航等 我该怎么办
  • 按顺序卸载补丁时 Windows Installer 出现“错误 1308。未找到源文件”场景

    我需要使用 Patch Design 和 Installshield 2012 创建的一系列可卸载补丁 前两个补丁在卸载时工作正常 但是 当且仅当已应用补丁 1 和 或补丁 2 时卸载第三个补丁时 才会产生错误 MSI c 48 C4 19
  • Docker 容器中的 Go 服务器空响应

    我有一个 Go 服务器 类似的东西 路由器是 Gorilla MUX var port string if port os Getenv PORT port port 3000 srv http Server Handler router
  • OLP CLI 错误:java.base 未将 sun.security.util 导出到 JDK 16 下的未命名模块

    在 MacOS Big Sur 11 4 最新的 OLP 10 0 9 和最新的 Java 16 0 1 下 在 akka 中遇到 olp 目录列表 错误 如果切换到 Java 8 相同的命令也可以工作 但这不是重点 根据用户指南 Java