2011-05-18 114 views
0

我想在Unix(Solaris要具体)编译一个Java项目(的Lisp解释器的)。我的问题是我有一些扩展其他类的类,但是当javac试图编译扩展类时,它说它找不到超类。javac - 超类没有找到

命令I型:

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 
} 

回答

1

尝试增加-cp .javac呼叫,使得它搜索已编译类的当前目录。第二个电话是:

javac -cp . -g Sexp.java 

或者,给它所有的.java文件一气呵成:

javac -g LispObject.java Sexp.java 

一般来说,最好是建立一个特定的构建目录(我称之为/一些/目录/编译)及用途:

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

使得.class文件不来污染你的源文件directorie(S)。

请记住,您应该保持目录结构与包层次结构同步。如果您的课程位于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 
+0

一次给所有的文件似乎正在工作;你知道是否有办法用makefile来做到这一点? – 2011-05-18 16:12:12

+0

更好的选择是使用'-cp'指定构建的'.class'文件的位置。 (并且也使用'-d build_directory',这样'.class'文件就不会与''混在一起。java'文件) – Mat 2011-05-18 16:13:43

+0

对不起-1,但这并没有解决真正的问题:你不是从软件包根目录,而是从软件包层次结构中构建。 – 2011-05-18 17:32:14

0

你必须编译在一行中的所有类,如果你想认识超或添加生成的类的编译器通过ds_student类路径中说

0

通常包目录的问题。

对于包编译的类,把它们在对应于封装结构的目录,并从层次结构的根调用javac(或提供分层结构的根为-sourcepath,和在-d-classpath输出目录)。

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