"No compatible attachment provider is available" 是什么意思
What does "No compatible attachment provider is available" mean
最近我使用 byte buddy 开发了一个 java 代理。在eclipse中开发没问题,然后我把agent放到production,消息:
No compatible attachment provider is available
连同来自行
的一些堆栈跟踪
static {
ByteBuddyAgent.install();
}
经过一番调试,我发现了问题所在。如果使用 jre 而不是 jdk.
调用代理,则会出现消息 "No compatible attachment provider is not available"
不幸的是,无论 java
是 jdk 还是 jre,调用 java -version
都不会 return(消息为两者显示 Java runtime Environment
)。
在我的例子中 (OS:Windows) 这很棘手,因为较新的 jsdk-installations 将 C:\ProgramData\Oracle\Java\javapath
附加到系统路径,其中包含一个 jre 而不是一个jdk。先前添加的条目 %JAVA_HOME%/bin
通过此修改被隐藏。当我删除条目 C:\ProgramData\Oracle\Java\javapath
时一切正常。
我在使用 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
(来自 this link)需要包含 java 模块 jdk.attach
,而在我的最小 JRE 中并非如此。
在 --add-modules
下将 jdk.attach
模块添加到我的 jlink
命令后,错误消失了,我可以再次启动我的 Spring 启动应用程序。
最近我使用 byte buddy 开发了一个 java 代理。在eclipse中开发没问题,然后我把agent放到production,消息:
No compatible attachment provider is available
连同来自行
的一些堆栈跟踪static {
ByteBuddyAgent.install();
}
经过一番调试,我发现了问题所在。如果使用 jre 而不是 jdk.
调用代理,则会出现消息 "No compatible attachment provider is not available"不幸的是,无论 java
是 jdk 还是 jre,调用 java -version
都不会 return(消息为两者显示 Java runtime Environment
)。
在我的例子中 (OS:Windows) 这很棘手,因为较新的 jsdk-installations 将 C:\ProgramData\Oracle\Java\javapath
附加到系统路径,其中包含一个 jre 而不是一个jdk。先前添加的条目 %JAVA_HOME%/bin
通过此修改被隐藏。当我删除条目 C:\ProgramData\Oracle\Java\javapath
时一切正常。
我在使用 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
(来自 this link)需要包含 java 模块 jdk.attach
,而在我的最小 JRE 中并非如此。
在 --add-modules
下将 jdk.attach
模块添加到我的 jlink
命令后,错误消失了,我可以再次启动我的 Spring 启动应用程序。