java:tools.jar无法访问javaagent

时间:2016-02-15 13:17:09

标签: java javaagents

我正在开发一个Java代理,它使用tools.jar中的某些类通过像com.sun.tools.javac.util.Options之类的反射来使用。

为了测试我的代理,我正在设置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代理吗?

提前致谢,

2 个答案:

答案 0 :(得分:0)

将jdk导入项目属性中的构建路径。在eclipse中,属性 - > Java构建路径 - >图书馆 (即).... \ Java \ jdk1.7.0_79 \ lib tools.jar将出现在这里

答案 1 :(得分:0)

我找到了解决方案。

我们有两个java应用程序:将构建gradle项目的gradle和连接到第一个java应用程序的javaagent。它们都生活在同一个JVM中,但每个都使用它的类加载器。

因此,objectFromFirstApp的类可以在gradle项目中访问,而不能在java代理中访问。

我们的想法是使用代理程序中的gradle应用程序的类加载器。

为此,我们必须从java代理中访问gradle项目中创建的对象之一。实际上,我通过字节码增强来访问它。

如果tools.jar来自gradle应用,我可以通过objectFromFirstApp.getClass().getClassLoader().load("ClassName")访问<form id="myForm">