2016-05-30 71 views
1

當jar文件添加爲java一個agent何時應該在bootclasspath加入?Jar文件作爲Java代理

例子: 爲什麼我們添加lombok.jaragent日食開始時,爲什麼還我們在bootclasspath補充的嗎?

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

回答

1

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

代理商生活在自己類路徑,但共享與正常計劃的引導類路徑。

代理商通常使用的儀器來修改類的字節碼程序。如果這些修改會將來自程序的調用添加到僅在代理程序的jar中可用的代碼中,那麼應用程序類加載器和驗證程序將使用應用程序類加載器來解析這些對該程序的類路徑的調用,該類加載器隨後使用父類加載器,到bootclassloader。請參閱Oracle documentation瞭解更多信息。

由於代理類加載器是不是在父類加載器的結構,不能調用代碼,這是隻適用於代理的jar文件。

最簡單的辦法是給代理人的jar添加到啓動類路徑,使得可用於代理和程序都代理人的罐子的代碼。

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

披露:我是一名龍目島開發人員。

+0

我很想知道使用僅在lombok.jar中可用的lombok的程序需要什麼類型的調用?我還在這裏閱讀了https://www.ibm.com/developerworks/library/j-lombok/,http://notatube.blogspot.ie/2010/11/project-lombok-trick-explained.html,龍目島不修改字節碼,而是轉換AST。但是你在上面寫過它修改字節碼。你可以請。澄清? – Ashley

+0

我們更改Eclipse類的字節碼。哦,如果你使用'@ SneakyThrows',我們也會改變一小部分的字節碼,只是[去掉對Lombok.sneakyThrow的調用](https://github.com/rzwitserloot/lombok/blob/master/src/核心/龍目島/字節碼/ SneakyThrowsRemover.java#L67)。 –

+0

爲什麼需要更改eclipse類的字節碼?此外,我對lombok能否改變線路號碼錶示懷疑。在堆棧跟蹤,這將導致行號指向錯誤的信息(http://stackoverflow.com/questions/37908097/line-numbers-generation-with-lombok) – Ashley