【问题标题】:javac - Superclasses not foundjavac - 未找到超类
【发布时间】:2011-05-19 06:52:46
【问题描述】:

我正在尝试在 Unix(具体来说是 Solaris)中编译一个 Java 项目(Lisp 解释器)。我的问题是我有一些扩展其他类的类,但是当 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
}

【问题讨论】:

    标签: java package javac


    【解决方案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
    

    【讨论】:

    • 一次给它所有文件似乎是有效的;你知道是否有办法用 makefile 做到这一点?
    • 更好的选择是使用-cp 指定构建的.class 文件的位置。 (也使用-d build_directory,这样.class 文件就不会与您的.java 文件混淆)
    • 抱歉 -1,但这并不能解决真正的问题:您不是从包根目录构建,而是从包层次结构内部构建。
    • @Paŭlo Ebermann:你说得对,目录结构需要与包层次结构相匹配。据我所知,这个问题的具体问题并不存在。在任何情况下都更新了我的答案,使其更加明确。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      通常的包目录问题。

      编译包中的类,放在包结构对应的目录下,从层次结构的根目录调用javac(或者提供层次结构的根为-sourcepath,输出目录在-d-classpath)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        • 1970-01-01
        • 2022-07-30
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多