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

Java 如何在没有jar的情况下连接代理?,java,jar,jvm,agent,byte-buddy,Java,Jar,Jvm,Agent,Byte Buddy,(使用Java 11) 我可以通过以下方式在运行时向代理注入jar: virtualmachinejvm=VirtualMachine.attach(jvmPid); loadAgent(“/path/to/agent.jar”); jvm.detach(); 有没有办法在没有罐子的情况下连接 我可以用byte-buddy来实现这一点,但是如果没有像byte-buddy这样的第三方库,该如何实现呢?你必须有一个jar文件来实现这一点 字节好友代理(字节好友代理,而不是字节好友jar)包含代理清

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

virtualmachinejvm=VirtualMachine.attach(jvmPid);
loadAgent(“/path/to/agent.jar”);
jvm.detach();
有没有办法在没有罐子的情况下连接
我可以用
byte-buddy
来实现这一点,但是如果没有像
byte-buddy
这样的第三方库,该如何实现呢?

你必须有一个jar文件来实现这一点

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


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

我可以问一下您为什么要这样做吗?这看起来有点像X-Y问题。原则上,您可以像byte buddy自己做的那样,本质上就是从字节数组定义类
sun.misc.Unsafe.defineClass
可以从字节数组定义类,尽管在java 11上访问
sun.misc.Unsafe
类型方法有点棘手。@PiRocks一个代码challange需要这样做,我可以用手工创建的jar来做,但是challange需要不用jar来做。java代理是jar文件。不清楚在没有JAR文件的情况下你想“附加”什么。他们当然可以使用完全本机代理,而不需要JAR?那么它需要一个so文件。