最近我使用byte buddy开发了一个java代理。日食的发展很好,然后我把代理人投入生产和消息:
No compatible attachment provider is not available
以及源自行
的一些堆栈跟踪static {
ByteBuddyAgent.install();
}
答案 0 :(得分:4)
经过一些调试后我发现了问题。消息"没有兼容的附件提供商不可用"如果使用 jre 而不是 jdk 调用代理,则会出现。
不幸的是,调用java -version
不会返回java
是jdk还是jre(消息显示为Java runtime Environment
)。
在我的情况下(操作系统:Windows)它很棘手,因为较新的jsdk-installed将C:\ProgramData\Oracle\Java\javapath
附加到系统路径,其中包含jre而不是jdk。通过此修改隐藏了之前添加的条目%JAVA_HOME%/bin
。当我删除条目C:\ProgramData\Oracle\Java\javapath
时,一切正常。
答案 1 :(得分:0)
我在使用 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 中并非如此。
在 jdk.attach
下将 jlink
模块添加到我的 --add-modules
命令后,错误消失了,我可以再次启动我的 Spring Boot 应用程序。