1

jar 文件何时添加为agentinjava以及何时应添加 in bootclasspath

示例:为什么我们在 Eclipse 开始时添加lombok.jaragent为什么还要添加bootclasspath?

 -javaagent:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
 -Xbootclasspath/a:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar
4

1 回答 1

1

首先,在 lombok 1.16.x 中,不再需要将 lombok.jar 添加到 bootclasspath。

代理存在于自己的类路径中,但与常规程序共享引导类路径。

代理通常使用检测来修改程序中类的字节码。如果这些修改将来自您的程序的调用添加到仅在代理的 jar 中可用的代码,则应用程序类加载器和验证程序将使用应用程序类加载器解决这些调用,该类加载器又使用父类加载器,一直向上到引导类加载器。有关详细信息,请参阅Oracle 文档

由于代理类加载器不在父类加载器结构中,因此您不能调用仅在代理的 jar 文件中可用的代码。

最简单的解决方案是将代理的 jar 添加到 bootclasspath,使代理 jar 中的代码可用于代理和程序。

在 lombok 1.16.x 中,使用了不同的方法。代理修改 Eclipse 类加载器以在解析类时也查看 lombok.jar。

披露:我是龙目岛开发人员。

于 2016-05-31T09:11:33.037 回答