2014-06-08 83 views
0

我还没有直接从命令行运行非jar的java程序很长时间,但现在我需要它了我有一些问题,程序不会在需要的库中找到所需的库类路径 要重现我的问题,我已经创建了如下,这里的Java文件的代码:java不会在类路径中找到类所需的类

package launcher; 

import org.joda.time.DateMidnight; 

public class Launcher { 

    public static void main(String... args){ 
     DateMidnight mid=new DateMidnight(); 
     System.out.println(mid.dayOfMonth().toInterval()); 
    } 
} 
在我的“在Mac上”用户在我的当前目录

,我只有以下jar:joda-time-2.0.jar和上面的.java文件。 我想要编译并运行它,所以我做的:

javac -d . -cp joda-time-2.0.jar Launcher.java 

我现在已经在我的当前文件夹下面的:

Launcher.java  joda-time-2.0.jar launcher 

哪里launcher是包含Launcher.class

一个目录

现在,如果我运行java -cp . launcher.Launcher 我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/DateMidnight 
at launcher.Launcher.main(Launcher.java:8) 

引起:java.lang.ClassNotFoundException:org.joda.time.DateMidnight

我告诉vm编译好的joda库在哪里,这里有什么错误?

回答

0

您在javac调用中包含了JAR。但是只有在类路径中的当前目录中调用java

试试这个:

java -cp .:joda-time-2.0.jar launcher.Launcher 
0

罐子被视为单独的位置/目录,因此.将不能代表他们。在编译和运行代码时,您需要将它们明确地添加到类路径中。这取决于你所使用的操作系统使用类似

java -cp .;joda-time-2.0.jar launcher.Launcher 

java -cp .:joda-time-2.0.jar launcher.Launcher 

如果你想添加更多的罐子,你也可以使用*.jar通配符。