javac - суперклассы не найдены - PullRequest
0 голосов
/ 18 мая 2011

Я пытаюсь скомпилировать проект Java (из интерпретатора Lisp) в Unix (точнее, 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

(я не знаю, очень ли это актуально, но это для проекта класса, поэтому мне нужно использовать make-файл для компиляции, чтобы я мог 'Для компиляции нельзя использовать любые 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 ]

1 голос
/ 18 мая 2011

Попробуйте добавить -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
0 голосов
/ 18 мая 2011

Обычная проблема с каталогом пакетов.

Для компиляции классов в пакетах поместите их в каталог, соответствующий структуре пакета, и вызовите javac из корня иерархии (или укажите корень иерархии как -sourcepath, а каталог вывода - -d и -classpath).

javac interpreter/LispObject.java
javac interpreter/Sexp.java
0 голосов
/ 18 мая 2011

вам нужно скомпилировать все классы в одну строку, если вы хотите, чтобы компилятор распознал суперкласс или добавил сгенерированный класс в classpath, как сказано ds_student

...