java不会在类路径中找到类所需的类

时间:2014-06-08 16:13:12

标签: java classpath

我已经多年没有直接从命令行运行非jar 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库在哪里,这里有什么问题?

2 个答案:

答案 0 :(得分:0)

您在javac来电中加入了JAR。但是您只使用类路径中的当前目录调用java

试试这个:

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

答案 1 :(得分:0)

Jars被视为单独的位置/目录,因此.不会代表它们。在编译和运行代码时,需要将它们显式添加到类路径中。使用像

这样的东西
java -cp .;joda-time-2.0.jar launcher.Launcher 

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

取决于您使用的操作系统。

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