3

我試圖在實現真實的東西之前創建一個簡單的Java代理程序。我無法讓它運行。很明顯,我有某種配置或類路徑問題。沒有任何的看和嘗試導致我的問題。無法獲取-javaagent而無錯誤地運行

如果我運行:

java -cp ./demoAgent.jar -javaagent:./demoAgent.jar com.kingtigerbooks.demoMod.Main

我得到以下錯誤:

Exception in thread "main" java.lang.ClassNotFoundException: com.kingtigerbooks.demoAgent.Agent 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:280) 
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338) 
FATAL ERROR in native method: processing of -javaagent failed 
Abort trap 

我在我的Mac上運行此。包含代理的jar文件位於當前目錄中。 JAR文件清單如下:

Manifest-Version: 1.0 
Premain-class: com.kingtigerbooks.demoAgent.Agent 
Can-Redefine-Classes: true 

如果像類路徑問題的氣味,但你可以看到我已經包含在類路徑上的罐子。任何幫助,將不勝感激。它是一個非常簡單的項目。

+0

這裏顯然有些奇怪。我在Ubuntu上做了或多或少的相同的事情,它工作。我沒有看到有什麼不同。理想情況下,我想提示如何調試此類問題。 – DungeonTiger 2012-03-27 00:02:39

+0

我得到這個錯誤我編譯我的項目與jdk1.8時,我應該已經使用1.7 .... – djangofan 2015-01-30 00:48:56

回答

2

當你運行一個代理時,你做不是把代理jar添加到普通的classpath中。

作爲附註,您可以將-verbose:class添加到命令行以獲取有關類加載過程的信息。

+0

不幸的是,這導致了同樣的錯誤。命令行是java -javaagent:./ demoAgent.jar com.kingtigerbooks.demoMod.Main – DungeonTiger 2012-03-26 19:49:47

+0

@DungeonTiger - 你的類路徑中有Main類嗎? – jtahlborn 2012-03-26 20:47:55

+0

Hummm ....我會說是的,因爲如果我刪除-javaagent選項,它運行,我得到我美麗的Hello World類型的輸出。葉。所以這告訴我這個部分是正確的。此外,它並不抱怨Main類,它抱怨代理類在demoAgent.jar中。 – DungeonTiger 2012-03-26 21:41:54

4

問題已解決。我有一個不好的jar文件。代理jar文件不包含代理類。通過構建正確的jar文件並將jar的完全限定路徑放入javaagent參數中,它都可以工作。

相關問題