2015-11-20 1 views
1

Я пытаюсь высмеять класс, который загружается некоторым процессом, чтобы вернуть другое значение.ByteBuddy IllegalStateException: поставщик приложения не может подключиться к текущему JVM

Скажем, у меня есть

Class A 
{ 
    public static IClassType getTheClass() 
    { 
     new ClassB(); 
    } 
} 

И я хочу, что если какой-то процесс вызывает ClassA.getTheClass() вернуть ClassC (который, конечно, реализует IClassType)

Как-то я понял, что это должно быть возможно с горячей замены Byte Бадди возможностей. Но я не могу установить агента. Я попытался с -javaagent:C:\byte-buddy-agent-0.7.1.jar переключателем Wich дает мне

java.lang.IllegalStateException: The Byte Buddy agent is not installed or not accessible 

, а также с ByteBuddyAgent.install();, который производит

java.lang.IllegalStateException: Attachment provider cannot connect on the current JVM: ByteBuddyAgent.AttachmentProvider.Compound{attachmentProviders=[ByteBuddyAgent.AttachmentProvider.ForJigsawVm.INSTANCE, ByteBuddyAgent.AttachmentProvider.ForToolsJarVm.JVM_ROOT, ByteBuddyAgent.AttachmentProvider.ForToolsJarVm.JDK_ROOT, ByteBuddyAgent.AttachmentProvider.ForToolsJarVm.MACINTOSH]} 

на моей машине. Это работает только для OpenJDK? Я что-то упускаю?

+0

Какая виртуальная машина вы используете? Параметр javaagent должен работать для любой JVM. Отправка времени выполнения только для OpenJDK и J9 JDK. –

+0

Я использую JRE1.8.0-65 ​​64bit на 64-битной машине Windows 7. Попытка начать с затмения с аргумента виртуальной машины: -javaagent: D: \ _ WORKFOLDER \ ByteBuddy \ byte-buddy-agent-0.7.1.jar –

+0

На VM не-JDK приложение времени выполнения не будет работать, поскольку оно требует a * tools.jar * доступно. Однако подход с настройкой javaagent должен работать. Вы уверены, что находитесь в правильном файле? Я посмотрю на это завтра и посмотрю, что что-то недавнее обновление сломало. –

ответ

0

Произошла ошибка в byte-buddy-agent.jar до недавнего времени. Попробуйте использовать более новую версию, и она должна работать без проблем.

ByteBuddyAgent действительно работает только с JVM, поддерживающим ту или иную форму tools.jar. (В настоящее время OpenJDK, OracleJDK и J9.)

Смежные вопросы