如何在没有jar的情况下连接代理?

r1zhe5dt  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(381)

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

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

有没有办法不用jar装上?
我可以用它来做 byte-buddy ,但是如果没有第三方库(如 byte-buddy ?

jw5wzhpr

jw5wzhpr1#

你必须有一个jar文件。
byte-buddy代理(byte-buddy-agent,而不是byte-buddy-jar)包含代理清单头本身。在第一次尝试中,它尝试在本地文件系统上定位自己的jar(通过 getProtectionDomain().getCodeSource() ). 如果它不能这样做,或者作为非jar文件存在于文件夹中,那么它将创建一个具有所需属性的临时jar文件。
字节伙伴代理是一个最小的零依赖jar。我建议使用它,因为attachapi的名称空间在旧的ibm和hotspot vm上不同,它需要在java9+上进行不同的设置,而且如果存在jna,byte buddy可以在非jdk vm上模拟附件(免责声明:我是作者。)

相关问题