[英]Jar file as agent in java
什么时候在java
添加 jar 文件作为agent
,什么时候应该在bootclasspath
添加?
示例:为什么我们在 eclipse 启动时添加lombok.jar
作为agent
,为什么还要添加到bootclasspath
?
-javaagent:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
-Xbootclasspath/a:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
首先,在 lombok 1.16.x 中不再需要将 lombok.jar 添加到引导类路径。
代理存在于它们自己的类路径中,但与常规程序共享引导类路径。
代理通常使用检测来修改程序中类的字节码。 如果这些修改将来自您的程序的调用添加到仅在代理的 jar 中可用的代码,应用程序类加载器和验证器将针对程序的类路径解析这些调用,使用应用程序类加载器,而应用程序类加载器又使用父类加载器,一直向上到引导类加载器。 有关更多信息,请参阅Oracle 文档。
由于代理类加载器不在父类加载器结构中,因此您无法调用仅在代理的 jar 文件中可用的代码。
最简单的解决方案是将代理的 jar 添加到引导类路径,使代理 jar 中的代码可用于代理和程序。
在 lombok 1.16.x 中,使用了不同的方法。 代理会修改 Eclipse 类加载器,以便在解析类时也查看 lombok.jar。
披露:我是龙目岛的开发人员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.