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参数中,它都可以工作。

相关问题