如何在没有罐子的情况下附着药剂?

问题描述 投票:0回答:2

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

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

有什么方法可以在不使用罐子的情况下固定 我可以使用
byte-buddy

 做到这一点,但是如果没有像 
byte-buddy
 这样的第三方库怎么办?

java jar jvm agent byte-buddy
2个回答
2
投票
您必须有一个 jar 文件。

Byte Buddy 代理(

byte-buddy-agent,而不是 byte-buddy jar)包含代理清单标头本身。在第一次尝试中,它尝试在本地文件系统上找到自己的 jar(通过 getProtectionDomain().getCodeSource()

)。如果它无法执行此操作或作为文件夹中的非 jar 文件存在,它将创建一个具有所需属性的临时 jar 文件。

byte-buddy-agent是一个最小的、零依赖的jar。我建议使用它,因为附加 API 的命名空间在旧的 IBM 和 HotSpot VM 上有所不同,它需要在 Java 9+ 上进行不同的设置,并且如果存在 JNA,Byte Buddy 可以在非 JDK VM 上模拟附件。 (免责声明:我是作者。)


0
投票
在临时文件中创建 jar,然后加载它,java 有所有方法。

© www.soinside.com 2019 - 2024. All rights reserved.