3

在实现真实的东西之前,我正在尝试创建一个简单的 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 包含在类路径中。任何帮助,将不胜感激。这是一个非常简单的项目。

4

2 回答 2

4

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

于 2012-03-27T15:13:24.433 回答
2

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

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

于 2012-03-26T19:31:15.970 回答