Заявленный пакет не соответствует ожидаемому пакету «»

89

Я использую Eclipse и какое-то время не использовал Java. Однако я могу легко скомпилировать свой код в командной строке и сгенерировать необходимые .classфайлы. В Eclipse жалуется на это The declared package "Devices" does not match the expected package "". Что это значит и как это исправить?

Образец кода:

package Devices;

public final class DevFrequency 
{
    public short messageID;
    public double frequency;
    public short converterID;
    public DevFrequency() 
    {
    }
    public DevFrequency(short _messageID,double _frequency,short _converterID)
    {
        messageID = _messageID;
        frequency = _frequency;
        converterID = _converterID;
    }
}

Название моего проекта DeviceDDS.

Марсель Корпель
источник
2
Этот класс находится в /src/Convertersкаталоге?
Джереми,
6
Если вы собираетесь изменить свой вопрос ретроспективно (что, честно говоря, кажется бессмысленным), вы должны быть последовательны в этом - вы не редактировали первый абзац вопроса. Вы также сделали все комментарии странными. Зачем менять все почти через полтора года?
Джон Скит

Ответы:

52

Eclipse ожидает, что объявленный пакет будет соответствовать иерархии каталогов, поэтому он ожидает, что ваш файл Java находится в каталоге под названием «Devices» в корневом каталоге исходного кода. На данный момент похоже, что файл находится прямо в корне вашего исходного кода. Итак, создайте соответствующий каталог и переместите туда файл.

Обратите внимание, что обычно пакеты записываются в нижнем регистре и включают название вашей организации в обратном порядке DNS, например

com.foo.devices;
Джон Скит
источник
3
@Sakti: Насколько я знаю, вы не можете этого сделать, и я настоятельно рекомендую вам не делать этого, даже если бы вы могли. Все опытные Java-разработчики ожидают, что вы будете следовать обычным соглашениям.
Джон Скит
88

Попробуйте закрыть и снова открыть файл.

Эту ошибку можно получить в eclipse, когда нет абсолютно ничего плохого в расположении файла или объявлении пакета. Попробуйте это, прежде чем тратить много времени на попытки других решений. Иногда затмение просто сбивает с толку. У меня это срабатывало несколько раз. Я связываю идею к Джошуа Голдберг .

Candied_orange
источник
2
Была эта проблема с проектом Gradle внутри VS Code. Повторное открытие исправлено.
TastyWheat
1
открытие и закрытие файла в редакторе eclipse помогло решить проблему. Я добавил исходную папку в сборку java config - вкладка «Источник», ошибка не была удалена, но когда я закрыл и открыл редактор в eclipse, это помогло. :-)
JassJava
Выход и перезапуск eclipse также устранили проблему.
Дон Смит
он он .. Я потратил час, пытаясь это исправить, а потом увидел это.
Викаш,
44

Решение 1. Одно решение, которое сработало для меня, когда эта ошибка « Объявленный пакет не соответствует ожидаемому пакету » возникла для проекта, который я получил из eclipse CVS:

1. Щелкните проект правой кнопкой мыши на панели навигации и выберите «Удалить».
2. Убедитесь, что параметр « Удалить содержимое проекта на диске » НЕ установлен , и нажмите «ОК».
3. Теперь после удаления проекта перейдите в Файл -> Импорт -> Общие -> Существующие проекты в
рабочую область. 4. Выберите свое рабочее пространство из списка каталогов и установите флажок рядом с именем вашего проекта. Нажмите " Готово ".

Решение 2. Я снова получил эту ошибку со следующим сообщением

Ошибки сборки Eclipse - java.lang.Object не может быть разрешен. Мне пришлось следовать другому маршруту, упомянутому здесь, и ошибка исчезла.

В то же время необходимо удалить системную библиотеку JRE из проекта, а затем снова добавить ее. Вот шаги:

  1. Перейдите к свойствам проекта с ошибкой сборки (щелкните правой кнопкой мыши> Свойства). Просмотрите вкладку «Библиотеки» в разделе «Путь сборки». Найдите в списке «Системную библиотеку JRE» (если она отсутствует, то это сообщение об ошибке не является eclipse, но неправильно настроенный проект)
  2. Удалите «Системную библиотеку JRE»
  3. Нажмите «Добавить библиотеку ...», выберите «Системная библиотека JRE» и добавьте соответствующую JRE для проекта (например, «Рабочая среда по умолчанию JRE»).
  4. Нажмите «Готово» в выборе библиотеки и «ОК» в свойствах проекта, а затем дождитесь повторной сборки проекта.

Надеюсь, ошибка будет устранена ...

наноспек
источник
Мне тоже пришлось это сделать (добавить в сборку каталог отличных тестов). Не забывайте делать заметки о своих конфигурациях запуска, которые вам нужно будет воссоздать. Есть идеи, зачем это нужно? Такая боль.
Джошуа Голдберг,
11
Более простое решение: я снова оказался в этой ситуации и смог заставить его работать, закрыв проект, перезапустив Eclipse и повторно открыв проект.
Джошуа Голдберг
12
Еще проще! У меня это было снова, и оно исчезло, закрыв и снова открыв редактор единственного проблемного файла.
Джошуа Голдберг
4
Кажется, что перезапуск затмения исправил это.
Mike R
Решение 1 сработало для меня. Очень странно. Я импортировал тот же git clone в Eclipse на других машинах и не видел этой проблемы.
dnuttle
13

Я решил проблему, выполнив следующие действия:

  1. Выберите проект - щелкните правой кнопкой мыши - путь сборки java.

  2. Во вкладке источника - вы меняете свой srcна src/main/java.

  3. Eclipse изменит порядок всего проекта.

Дафали
источник
11

У меня была эта проблема - другие классы в моем пакете были в порядке, но один класс имел ошибку. В объявлении пакета не было ничего плохого.

Я исправил это, сделав refactor->moveи временно переместив класс в другой пакет, а затем refactor->moveобратно в исходный пакет.

аяхуаска
источник
2

У вас должен быть класс внутри папки Devices.

Марсело
источник
2

Создайте в своем проекте новый пакет под названием «Устройства» и разместите в нем свой класс. Это эквивалентно помещению класса в каталог под названием «Devices» в исходной папке проекта.

tskuzzy
источник
1

Убедитесь, что Devicesон определен как исходная папка в свойствах проекта.

Адам Матан
источник
1

Получил ту же ошибку, но мой пакет был абсолютно правильным. Когда я просто закрыл и открыл свой редактор, ошибка исчезла. Надеюсь, это может помочь в некоторых сценариях.

Ишварамурти К.
источник
1

Я исправил это, удалив атрибут "исключения" для этого пакета в моем .classpathфайле. Удалите атрибут, а не весь тег, иначе «src / java» перестанет быть исходной папкой.

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>
Ноуменон
источник
1

Эта проблема получила решена упоминая пакет имя

Я переместил свой файл Test_Steps.java, который находился в пакете stepDefinition

введите описание изображения здесь

просто добавив пакет stepDefinition проблема решена

Таким образом, эта проблема может возникнуть, когда у вас есть пакет, который вы не используете в своем файле класса.

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

введите описание изображения здесь

Гаурав хурана
источник
0

Убедитесь, что вы создали правильный пакет. У вас может быть возможность создать папку вместо пакета.

Картик
источник
0
  1. Создайте каталог [your.project.name] в корневом каталоге рабочей области вашего проекта.

  2. Скопируйте * .java из "src" в этот каталог.

  3. Закройте и снова откройте проект.

B347tl7
источник
0

Это случилось со мной, когда я проверял проект из репозитория svn в eclipse. В моей папке .m2 были файлы jar, на которые eclipse не смотрел. Чтобы исправить проблему, я сделал:

щелкните правой кнопкой мыши папку проекта Настроить> Преобразовать в проект Maven

и это решило проблему.

carl_corder
источник
0

Есть миллион ответов, но вот еще один: скопируйте файлы в новый пакет, удалите старый пакет и переименуйте новый пакет в имя старого пакета.

Омри374
источник
0

Убедитесь, что вы не используете пакет по умолчанию. Создайте новый пакет с именем «devices», скопируйте в него этот код и используйте.


источник
0

У меня были такие ситуации, когда я копировал классы из других пакетов / проектов.

Меню-> Проект-> Очистить обычно помогает.

Юрин
источник
0

В моем случае я выбрал маркер ошибки на вкладке «Проблемы» и удалил его, поскольку основной метод файла Java выполнялся правильно. Это некий глюк в Eclipse Neon с множеством установленных плагинов.

Лениэль Маккаферри
источник
0

Я тоже столкнулся с этой проблемой, когда импортировал существующий проект в eclipse. Это был проект Gradle, но при импорте я импортировал его как обычный проект, щелкнув Общие-> Существующие проекты в Рабочую область. Чтобы решить эту проблему, я добавил в проект Gradle nature: :::: Щелкните правой кнопкой мыши папку Project -> Configure-> Add Gradle Nature.

Гопи
источник
0

Я использовал Spring Tool Suite 4. Не смог разобраться в проблеме. Структура каталогов соответствовала имени пакета.

Но чистка проекта мне помогла.

присар
источник
0

У меня была такая же проблема с проектом maven в Eclipse IDE. Я смог решить эту проблему, заменив файл .classpath на правильный формат. После замены закройте и откройте проект.

Пример файла .classpath

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/webapp">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
Гихан-Мадуранга
источник