我正在尝试在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
}
答案 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