[英]Java: tools.jar not accessible for javaagent
我正在开发一个Java代理,它通过像com.sun.tools.javac.util.Options
这样的反射来使用tools.jar
一些类。
为了测试我的代理,我设置了set JAVA_TOOL_OPTIONS=-javaagent:path-to-my-agent-jar
并在一个简单的gradle项目上启动构建,java代理将被挂钩。
我已将tools.jar
添加到gradle项目的类路径中并检查它是否已正确添加到类路径中。
我的代理正确地挂钩到构建过程。
我的问题似乎是代理无法访问用于构建的类加载器,因此无法从tools.jar中找到类并引发
java.lang.Error: java.lang.ClassNotFoundException: com/sun/tools/javac/util/Options
无论如何我可以将tools.jar添加到我的java代理中吗?
提前致谢,
将jdk导入项目属性中的构建路径。在eclipse中,属性 - > Java构建路径 - >库(即).... \\ Java \\ jdk1.7.0_79 \\ lib tools.jar将出现在此处
我找到了解决方案。
我们有两个java应用程序:gradle将构建一个gradle项目,javaagent将连接到第一个java应用程序。 它们都生活在同一个JVM中,但每个都使用它的类加载器。
因此,可以在gradle项目中访问tools.jar
的类,而不是在java代理中。
我们的想法是使用代理程序中的gradle应用程序的类加载器。
为此,我们必须从java代理中访问gradle项目中创建的对象之一。 实际上,我通过字节码增强访问它。
如果objectFromFirstApp
来自gradle应用程序,我可以通过objectFromFirstApp.getClass().getClassLoader().load("ClassName")
访问tools.jar
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.