【问题标题】:Java NoClassDefFoundError when the jar clearly has itJava NoClassDefFoundError 当 jar 清楚地有它时
【发布时间】:2009-12-24 02:25:04
【问题描述】:

我有一个简单的类,它从另一个 jar 导入另一个类。一切都编译得很好,但试图运行它......

$ jar tvf ../../pig-2.1.jar  | grep TupleFact
1641 Mon Feb 02 17:56:32 UTC 2009 org/apache/pig/data/DefaultTupleFactory.class
2289 Mon Feb 02 17:56:30 UTC 2009 org/apache/pig/data/TupleFactory.class
$ javac ../src/Convert.java -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'`
$ java Convert -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'`
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/pig/data/TupleFactory
        at Convert.<clinit>(Convert.java:31)
Caused by: java.lang.ClassNotFoundException: org.apache.pig.data.TupleFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        ... 1 more

有什么想法吗?你如何开始调试这个?

【问题讨论】:

    标签: java classpath noclassdeffounderror


    【解决方案1】:

    我认为问题出在您运行命令的方式上:

    java Convert -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'`
    

    应该是

    java  -classpath `echo ../lib/* ../../lib/* | sed 's/ /:/g'` Convert
    

    “java”命令的命令行语法是:

    javac [ <options for the JVM> ... ] <classname> [ <application args> ... ]
    

    如果您将“-classpath”选项放在类名之后,它将被视为应用程序参数,您将使用默认的类路径执行您的应用程序。

    【讨论】:

      【解决方案2】:

      你必须在选项后面加上类名,像这样:

      $ java -classpath <...> Convert
      

      【讨论】:

        猜你喜欢
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多