"No compatible attachment provider is available"是什么意思



最近我使用byte buddy开发了一个java代理。eclipse 的开发很好,然后我将代理投入生产并传达消息:

No compatible attachment provider is available

以及一些源自行的堆栈跟踪

static {
  ByteBuddyAgent.install();
}

经过一些调试,我发现了问题。如果使用 jre 而不是 jdk 调用代理,则会出现消息"没有兼容的附件提供程序不可用"。

不幸的是,调用java -version不会返回java是 jdk 还是 jre(消息显示Java runtime Environment(。

就我而言(OS:Windows(,这很棘手,因为较新的jsdk安装C:ProgramDataOracleJavajavapath附加到系统路径,其中包含jre而不是jdk。以前添加的条目%JAVA_HOME%/bin通过此修改被隐藏。当我删除该条目时C:ProgramDataOracleJavajavapath一切正常。

我遇到了

同样的问题,使用使用 jlink 创建的最小 JRE 启动 Spring Boot 2.3 应用程序。它不会启动,并且会继续抛出以下堆栈跟踪:

Caused by: java.lang.IllegalStateException: No compatible attachment provider is available
    at reactor.tools.shaded.net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:602)
    at reactor.tools.shaded.net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:586)
    at reactor.tools.shaded.net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:538)
    at reactor.tools.shaded.net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:515)
    at reactor.tools.agent.ReactorDebugAgent.init(ReactorDebugAgent.java:56)

我发现这个ByteBuddyAgent(从这个链接(需要包含java模块jdk.attach,而在我的最小JRE中并非如此。

--add-modules下将jdk.attach模块添加到我的jlink命令后,错误消失了,我可以再次启动我的 Spring 启动应用程序。

相关内容

最新更新