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


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, когда нет абсолютно ничего плохого в расположении файла или объявлении пакета. Попробуйте это, прежде чем тратить много времени на попытки других решений. Иногда затмение просто сбивает с толку. У меня это срабатывало несколько раз. Я связываю идею к Джошуа Голдберг .


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» в исходной папке проекта.



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. Закройте и снова откройте проект.


0

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

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

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


0

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


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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.