Заявлений пакет не відповідає очікуваному пакету “”


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-файл очікується у каталозі під назвою "Пристрої" під вашим вихідним корінцем. На даний момент схоже, що файл знаходиться безпосередньо у вашому вихідному корені. Тож створіть відповідний каталог і перемістіть файл туди.

Зверніть увагу, що зазвичай пакунки мають нижчий регістр і містять назву вашої організації в зворотному порядку DNS, наприклад

com.foo.devices;

3
@Sakti: Наскільки мені відомо, ви не можете, і я настійно рекомендую вам цього не робити, навіть якби ви могли. Усі досвідчені розробники Java очікують, що ви будете дотримуватися звичайних умов.
Джон Скіт,

88

Спробуйте закрити та повторно відкрити файл.

Отримати цю помилку в eclipse можна тоді, коли в розташуванні файлу чи декларації пакета немає абсолютно нічого поганого. Спробуйте це, перш ніж витрачати багато часу на випробування цих інших рішень. Іноді затемнення просто плутається. Це працювало у мене кілька разів. Я пов'язую ідею до Джошуа Голдберг .


2
Була ця проблема з проектом Gradle всередині VS Code. Повторно відкрийте виправлено.
TastyWheat

1
відкриття та закриття файлу в редакторі eclipse допомогло вирішити проблему. Я додав вихідну папку в java config build - вкладку source, помилка не була видалена, але коли я закрив і відкрив редактор у 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
Перезапуск eclipse, здається, це виправляє.
Mike R

Рішення 1 у мене спрацювало. Дуже дивно. Я імпортував той самий клон git в Eclipse на інших машинах і не бачив цієї проблеми.
пончик

13

Я вирішив проблему, виконавши такі дії:

  1. Виберіть проект - Клацніть правою кнопкою миші - шлях до збірки Java.

  2. На вкладці джерело - ви змінюєте значення srcна src/main/java.

  3. Eclipse змінить порядок усього проекту.


11

У мене була ця проблема - інші класи в моєму пакеті були нормальними, але один клас мав помилку. У декларації пакету не було нічого поганого.

Я виправив це, refactor->moveтимчасово перемістивши клас в інший пакет, а потім refactor->moveповернувшись до початкового пакета.



2

Створіть новий пакет під вашим проектом під назвою "Пристрої" та розмістіть у ньому свій клас. Це еквівалентно класу, розміщеному в каталозі під назвою "Пристрої" у вихідній папці проекту.


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


0

Це трапилося зі мною, коли я перевіряв проект зі сховища svn в eclipse. У моїй папці .m2 були файли jar, на які eclipse не дивився. Щоб вирішити проблему, яку я зробив:

клацніть правою кнопкою миші папку проекту Налаштувати> Перетворити на проект Maven

і це вирішило проблему.


0

Відповідей є мільйон, але ось ще одна: скопіюйте файли в новий пакет, видаліть старий пакет і перейменуйте новий пакет на ім’я старого пакета.


0

Переконайтеся, що ви не використовуєте пакет за замовчуванням. Створіть новий пакет із назвою 'пристрої' та скопіюйте цей код всередину нього та використовуйте.


0

У мене були такі ситуації, коли я копіював класи з інших пакетів / проектів.

Меню-> Проект-> Очищення зазвичай допомагає.


0

У моєму випадку я вибрав маркер помилки на вкладці Проблеми і видалив його, оскільки основний метод файлу Java виконувався правильно. Це деякий збій в Eclipse Neon з безліччю встановлених плагінів.


0

Я теж зіткнувся з цією проблемою, коли імпортував існуючий проект до затемнення. Це був проект gradle, але під час імпортування я імпортував його як звичайний проект, натиснувши Загальне-> Існуючі проекти у Робочу область. Щоб вирішити проблему, я додав до проекту природу Gradle :::: Клацніть правою кнопкою миші на папці Project -> Налаштування-> Додати 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.