javac - 找不到超级班级

时间:2011-05-18 16:07:18

标签: java package javac

我正在尝试在Unix中编译一个Java项目(一个Lisp解释器)(Solaris是特定的)。我的问题是我有一些扩展其他类的类,但是当javac尝试编译扩展类时,它说它无法找到超类。

我输入的命令:

javac -g LispObject.java
javac -g Sexp.java

第一个工作正常;但第二次停止时出现以下错误:

Sexp.java:7: Superclass interpreter.LispObject of class interpreter.Sexp not found.
public class Sexp extends LispObject
                          ^
1 error

(我不知道它是否非常相关,但这是一个类项目,所以我必须使用makefile进行编译,所以我不能使用任何IDE进行编译......这很糟糕,因为一切正常在NetBeans中很好。)

LispObject.java的代码:

package interpreter;

public class LispObject extends java.lang.Object
{
   // empty
}

Sexp.java的代码:

package interpreter;

public class Sexp extends LispObject
{
   // body stuff goes here
}

3 个答案:

答案 0 :(得分:1)

尝试将-cp .添加到javac调用中,以便在当前目录中搜索已编译的类。第二个电话会是:

javac -cp . -g Sexp.java

或者,一次性提供所有.java个文件:

javac -g LispObject.java Sexp.java

一般来说,最好是设置一个特定的构建目录(我称之为/ some / dir / build)并使用:

javac -cp /some/dir/build -d /some/dir/build your_file.java

以便.class文件不会污染您的源文件导向器。

请记住,您应该使目录结构与包层次结构保持同步。如果您的类位于interpreter包中,则应将它们放在具有该名称的目录中。

因此,在此特定实例中,您的编译命令应如下所示:

javac -cp /some/dir/build -d /some/dir/build interpreter/LispObject.java
javac -cp /some/dir/build -d /some/dir/build interpreter/Sexp.java

答案 1 :(得分:0)

如果希望编译器识别superClass或将生成的类添加到类路径中,则必须在一行中编译所有类,如ds_student所述

答案 2 :(得分:0)

通常的包目录问题。

要编译包中的类,请将它们放在与包结构相对应的目录中,并从层次结构的根调用javac(或将层次结构根提供为-sourcepath,并输出目录在-d-classpath)。

javac interpreter/LispObject.java
javac interpreter/Sexp.java