Ошибка Java: пакет 'x' не существует

Итак, у меня есть файловое дерево в Linux, которое выглядит так:

  • ~ / Keyboard_warriors/
    • тестовое задание/
      • ConfigTest.java
    • ConfigParser.class
    • ConfigParser.java

Проблема в том, что когда я пытаюсь ввести в Терминале:
javac ConfigTest.java

Я получаю ошибку:

ConfigTest.java:2: error: package keyboard_warriors does not exist  
import keyboard_warriors.*;  
^

Это действительно беспокоит меня, и я не мог найти ответы нигде. Если бы вы могли решить мою проблему, я был бы очень счастливым человеком.

3 ответа

Решение

Я давно понял ответ, но забыл его опубликовать. Извини:). Это на самом деле довольно просто. Я пытался скомпилировать классы изнутри test/ папка. Что я сделал, так это поднялся до места, где все классы были доступны без использования абсолютного пути и без использования ../ в пути (ака keyboard_warriors/ папка. Я просто откомпилировал оттуда, и все было в порядке. Спасибо за вклад, хотя, это помогло некоторым;).

Учитывая структуру, которую вы процитировали, было бы странно импортировать keyboard_warriors в ConfigTest; от структуры, вы ожидаете увидеть package keyboard_warriors; вместо этого, потому что ConfigTest находится в keyboard_warriors каталог.

Если ConfigTest не в keyboard_warriors пакет, вероятно, находится не в том каталоге.

В общем: когда вы компилируете классы, .java Файл должен находиться в каталоге с именем пакета, в котором он находится. Так, например, если ConfigTest должен быть в пакете, вы должны сохранить структуру каталогов / файлов как есть и использовать

package keyboard_warriors;

...в ConfigTest.java,

Если ConfigTest не должно быть в этом пакете, вы, вероятно, переместите его из этого каталога; возможно:

  • ~ / Keyboard_warriors/
    • тестовое задание/
      • ConfigTest.java
  • ConfigParser.class
  • ConfigParser.java

...а потом import keyboard_warriors.*; будет иметь смысл, при условии, что ваш домашний каталог находится в вашем classpath.

Он не будет распознавать каталог за пределами пути к классам как часть пути к классам.

То, что вы, вероятно, хотите, это включить другую папку внутри того места, где выполняется ваш тест:

test/
    keyboard_warriors/
        ConfigTest.java
        ConfigParser.java

Это также предполагает, что вы объявили эти классы в keyboard_warriors classpath, этим:

package keyboard_warriors;

В зависимости от того, как вы компилируете эти классы, вам нужно будет добавить его в classpath с помощью -cp флаг на javac,

Другие вопросы по тегам