Я пытаюсь высмеять класс, который загружается некоторым процессом, чтобы вернуть другое значение.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? Я что-то упускаю?
Какая виртуальная машина вы используете? Параметр javaagent должен работать для любой JVM. Отправка времени выполнения только для OpenJDK и J9 JDK. –
Я использую JRE1.8.0-65 64bit на 64-битной машине Windows 7. Попытка начать с затмения с аргумента виртуальной машины: -javaagent: D: \ _ WORKFOLDER \ ByteBuddy \ byte-buddy-agent-0.7.1.jar –
На VM не-JDK приложение времени выполнения не будет работать, поскольку оно требует a * tools.jar * доступно. Однако подход с настройкой javaagent должен работать. Вы уверены, что находитесь в правильном файле? Я посмотрю на это завтра и посмотрю, что что-то недавнее обновление сломало. –