jvm 动态连接Java代理不起作用

nwlls2ji  于 2022-11-07  发布在  Java
关注(0)|答案(2)|浏览(226)

我写了下面的代码来应对编码挑战。这个程序的目的是连接到另一个java进程,并在程序启动后加载一个指令引擎。这通常是在Java中通过在你的代理jar文件中实现一个agentmain方法来完成的。我在下面的代码中生成了这一切:
这个错误出现在运行toy程序的JVM上,提示是由于某种原因,它认为Agent类文件名是Agent$1。我注解掉了ByteBuddy的用法,并尝试使用内置库加载代理文件,但仍然失败。
第一个
有人知道我做错了什么吗?

dw1jzc5e

dw1jzc5e1#

对于generateSimpleAgent2(),它是有效的。它不会以同样的方式失败,就像你在 ewramner 的答案下的评论中所说的那样。这应该给予你一个线索。此外,如果你只是阅读了异常并相信它告诉你的,你就知道该怎么做了。再次强调:

java.lang.ClassNotFoundException: Agent$1

也就是说,generateSimpleAgent()创建了两个类文件,一个用于代理本身,一个用于它的匿名类。这正是 javac 应该做的。只要检查输出目录,您就会看到它。只需将缺少的类文件添加到JAR中,就可以了:

runCommand("jar -cfm agent.jar manifest.mf Agent.class Agent$1.class Transformer.class");

现在,带有匿名转换器类的代理也可以工作了。

hkmswyz6

hkmswyz62#

Agent$1是一个匿名类,因此它必须是您在此处创建的类:

new ClassFileTransformer() { ... }

至于为什么找不到它,你怎么修复它我不知道,也许你可以在引用它之前为它生成一个真实的的命名类?

相关问题