[英]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.