什么“没有兼容的附件提供商不可用”是什么意思

时间:2018-04-11 06:09:28

标签: java byte-buddy

最近我使用byte buddy开发了一个java代理。日食的发展很好,然后我把代理人投入生产和消息:

No compatible attachment provider is not available

以及源自行

的一些堆栈跟踪
static {
  ByteBuddyAgent.install();
}

2 个答案:

答案 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 应用程序。