Что означает Нет совместимого поставщика вложений

Недавно я разработал Java-агент, используя byte buddy. Разработка в eclipse прошла нормально, затем я запустил агент в производство и получил сообщение:

No compatible attachment provider is available

вместе с некоторыми трассировками стека, происходящими из строк

static {
  ByteBuddyAgent.install();
}

person CoronA    schedule 11.04.2018    source источник
comment
Фактическая ошибка: Нет совместимого поставщика вложений (в названии этого вопроса есть опечатка)   -  person tombrown52    schedule 22.01.2019
comment
Я изменил заголовок и содержание на правильную формулировку.   -  person CoronA    schedule 07.11.2019


Ответы (2)


После некоторой отладки я нашел проблему. Сообщение «Нет совместимого поставщика вложений недоступен» появляется, если агент был вызван с jre вместо jdk.

К сожалению, вызов java -version не возвращает результат, независимо от того, является ли java jdk или jre (сообщение отображает Java runtime Environment для обоих).

В моем случае (ОС: Windows) это было сложно, потому что более новые установки jsdk присоединяют C:\ProgramData\Oracle\Java\javapath к системному пути, который содержит jre, а не jdk. Благодаря этой модификации ранее добавленная запись %JAVA_HOME%/bin была скрыта. Когда я удалил запись C:\ProgramData\Oracle\Java\javapath, все заработало нормально.

person CoronA    schedule 11.04.2018

У меня была такая же проблема при запуске приложения Spring Boot 2.3 с минимальной JRE, созданной с помощью jlink. Он не запускался и продолжал выдавать следующую трассировку стека:

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.

После добавления модуля jdk.attach в мою команду jlink под --add-modules ошибка исчезла, и я снова смог запустить приложение Spring Boot.

person Ajunne    schedule 18.03.2021