无法让-javaagent无错误地运行

时间:2012-03-26 19:28:58

标签: java eclipse instrumentation classnotfoundexception javaagents

我正在尝试在实现真实的东西之前创建一个简单的Java代理程序。我无法让它运行。显然,我有某种配置或类路径问题。没有多少寻找和尝试导致我的问题。

如果我跑:

  

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

如果闻起来像类路径问题,但正如您所看到的,我已经将jar包含在类路径中。任何帮助,将不胜感激。这是一个非常简单的项目。

2 个答案:

答案 0 :(得分:4)

问题解决了。我有一个糟糕的jar文件。代理程序jar文件不包含代理程序类。通过构建正确的jar文件并在javaagent参数中将完全限定的路径放到jar上它一切正常。

答案 1 :(得分:2)

运行代理时,将代理jar添加到正常的类路径中。

作为旁注,您可以在命令行中添加-verbose:class以获取有关类加载过程的信息。