如何在没有罐子的情况下连接代理



(使用Java 11(
我可以在运行时使用jar注入代理,通过:

VirtualMachine jvm = VirtualMachine.attach(jvmPid);
jvm.loadAgent("/path/to/agent.jar");
jvm.detach();

有没有办法在没有罐子的情况下连接
我可以用byte-buddy做到这一点,但如果没有像byte-buddy这样的第三方库,如何做到这一步?

必须有一个jar文件。

Byte Buddy代理(Byte Buddy agent,而不是Byte Buddyjar(包含代理清单标头本身。在第一次尝试中,它尝试在本地文件系统上定位自己的jar(通过getProtectionDomain().getCodeSource()(。如果它不能做到这一点,或者在文件夹中作为非jar文件存在,它会创建一个具有所需属性的临时jar文件。

字节好友代理是一个最小的、零依赖的jar。我建议使用它,因为旧的IBM和HotSpot虚拟机上附加API的名称空间不同,它需要在Java 9+上进行不同的设置,并且如果存在JNA,Byte Buddy可以在非JDK虚拟机上模拟附加。(免责声明:我是作者。(

最新更新