Java:tools.jar对于javaagent不可访问

Java:tools.jar对于javaagent不可访问,java,javaagents,Java,Javaagents,我正在开发一个Java代理,它通过反射使用com.sun.tools.javac.util.Options等tools.jar中的一些类 为了测试我的代理,我将设置set JAVA\u TOOL\u OPTIONS=-javaagent:path to my agent jar,并在一个简单的gradle项目上启动一个构建,JAVA代理将连接到该项目 我已经将tools.jar添加到gradle项目的类路径中,并检查是否正确添加到了类路径中 我的代理正确地连接到构建过程 我的问题似乎是代理无法访

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

为了测试我的代理,我将设置
set JAVA\u TOOL\u OPTIONS=-javaagent:path to my agent jar
,并在一个简单的gradle项目上启动一个构建,JAVA代理将连接到该项目

我已经将
tools.jar
添加到gradle项目的类路径中,并检查是否正确添加到了类路径中

我的代理正确地连接到构建过程

我的问题似乎是代理无法访问用于构建的类加载器,因此他无法从tools.jar和raises中找到类

java.lang.Error: java.lang.ClassNotFoundException: com/sun/tools/javac/util/Options
我是否可以将tools.jar添加到java代理中


提前感谢,

将jdk导入到项目属性中的生成路径中。在eclipse中,属性-->Java生成路径-->库 (即)…\Java\jdk1.7.0\u 79\lib tools.jar将出现在这里

我找到了一个解决方案

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

因此,
tools.jar
的类可以在gradle项目中访问,而不是在java代理中

其思想是使用代理中gradle应用程序的类加载器

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


如果
objectFromFirstApp
来自gradle应用程序,我可以通过
objectFromFirstApp.getClass().getClassLoader()访问
tools.jar
。load(“ClassName”)

tools.jar是JDK库的一部分。您的应用程序是用JDK启动的吗?是的,事实上我正在将我的代理挂接到gradle上:我的代理挂接到tools.jar中用于编译java源代码的类的方法上。出于实际原因,我不想直接依赖tools.jar。我的目标是将它添加到客户端应用程序中,我的代理将在该应用程序上挂接。