首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java代理对较低版本目标JVM的支持

Java代理对较低版本目标JVM的支持
EN

Stack Overflow用户
提问于 2020-02-26 12:09:13
回答 1查看 75关注 0票数 0

目前,我正在使用Instrumentation开发动态Java,并注意到在ByteCode 11上编写的Java只能与JVM11连接,而不能使用任何较低版本的ByteCode应用程序。为了在此详细说明这一情况,我谨提及两种情况。

场景1我作为生产者和使用者在 11上开发了两个API,并部署在Apache 9上( tomcat运行在Java11上)。为了测试字节码注入,我启动了运行在Java 11上的代理,并发现该代理能够与正在运行的JVM连接。

场景2我已经在Java8上部署了消费者和生产者应用程序,在ApacheTomcat8.5上编译(tomcat在Java8上运行)。我启动了运行在Java 11上的代理,这次代理抛出了异常,如下所示

代码语言:javascript
复制
java.lang.UnsupportedClassVersionError: com/test/instrumentation/agent/TestAgent has been compiled by a more recent version of the Java Runtime (class file version 55.0), 
this version of the Java Runtime only recognizes class file versions up to 52.0  
代码语言:javascript
复制
VirtualMachine vm = VirtualMachine.attach("some java process id");
String  filePath = "C:\\test\\testagent-0.0.1-SNAPSHOT.jar";
vm.loadAgent(filePath, "some string");
vm.detach();

我遇到的问题是打电话给vm.loadAgent(filePath,"some string")

我理解此错误与版本不匹配有关,但我的要求是,无论JVM版本如何,我都需要能够附加任何JVM。有没有人在这个问题上有工作要做?

EN

回答 1

Stack Overflow用户

发布于 2020-02-26 14:14:53

如果您使用java 8编译代理,那么您就可以在java 8+中的任何应用程序中使用它。作为代理,应该可以在目标VM上加载。因此,您应该使用最低需要的版本进行编译。

最好是从目标应用程序的相同版本中运行代理注入器,但是无论如何,附加代理会将代理加载到目标jvm上,所以这并不重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60413614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档