【问题标题】:java agent class not found exceptionjava代理类未找到异常
【发布时间】:2011-11-17 15:19:57
【问题描述】:

我有一个目录结构“D:\workspace 2\project\lib”,其中包含所有文件“AgentMain.java”(我从 src 复制并放置在此处以使其更容易),“asm-all .3.3.jar”、“myagent.jar”。现在,当我尝试从命令提示符调用我的 java 程序时

D:\workspace 2\project\lib>java -javaagent:myagent.jar -cp asm-all-3.3.jar;. AgentMain.java

它在线程主 java.lang.NoclassDefFoundError AgentMain/java 中给了我异常,并说找不到主类 AgentMain.java

这里有什么问题?

【问题讨论】:

    标签: java command-line jar javaagents


    【解决方案1】:

    您正在尝试执行源文件 (AgentMain.java) 而不是类。确保您已使用 javac 编译 AgentMain,然后删除 .java 文件扩展名。

    更新基于 cmets 的讨论: 因为一旦你编译你的类,你的 AgentMain 类就定义在一个名为“main”的包中,它对应的类文件必须在一个名为“main”的目录中。

    因此,如果您使用包含的命令从“d:\workspace 2\project\lib”目录运行,则编译后的类需要位于 d:\workspace 2\project\lib\main\AgentMain 中。类

    【讨论】:

    • 是的,现在我先编译了源文件,然后用 java 运行它,但错误仍然存​​在
    • 你能发布你现在正在运行的确切命令以及 JVM 给你的错误吗?
    • 这是我的命令:java -javaagent:myagent.jar -cp asm-all-3.3.jar;。 AgentMain .....它说与 noclassdeffound 和找不到主类 AgentMain 相同的错误
    • 是您工作目录中的 AgentMain.class,它是否包含 main 方法?
    • 是的,我提到的所有内容都在工作目录中,它还包含主要方法
    【解决方案2】:

    你不能运行.java文件,你需要先用javac编译它们,然后运行编译后的代码(.class文件)。在您的示例中,您必须运行

    javac -cp asm-all-3.3.jar;. AgentMain.java
    

    然后

    java -javaagent:myagent.jar -cp asm-all-3.3.jar;. AgentMain
    

    【讨论】:

    • 是的,这是我的错误……但结果还是一样……即使我使用了 AgentMain 类文件
    【解决方案3】:

    您应该引用已编译的 .class 文件,而不是 .java 文件

    【讨论】:

      【解决方案4】:

      java 不解释源文件。

      你必须先用javac 编译AgentMain.java。然后你必须在命令行上指定AgentMain 而不是AgentMain.java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-23
        • 2021-04-14
        • 2015-05-11
        • 1970-01-01
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多