Zadeklarowany pakiet nie pasuje do oczekiwanego pakietu „”

89

Używam Eclipse i od jakiegoś czasu nie korzystam z Javy. Jednak mogę skompilować mój kod w wierszu poleceń i wygenerować niezbędne .classpliki. W Eclipse narzeka na to The declared package "Devices" does not match the expected package "". Co to oznacza i jak mogę to naprawić?

Przykładowy kod:

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;
    }
}

Nazwa mojego projektu to DeviceDDS.

Marcel Korpel
źródło
2
Czy ta klasa jest w /src/Converterskatalogu?
Jeremy
6
Jeśli zamierzasz zmienić swoje pytanie retrospektywnie (co wydaje się bezcelowe, szczerze mówiąc), musisz być konsekwentny - nie zredagowałeś pierwszego akapitu pytania. Sprawiłeś również, że wszystkie komentarze wyglądały dziwnie. Po co zmieniać wszystko, prawie półtora roku później?
Jon Skeet

Odpowiedzi:

52

Eclipse oczekuje, że zadeklarowany pakiet będzie zgodny z hierarchią katalogów - więc oczekuje, że plik Java będzie znajdować się w katalogu o nazwie „Urządzenia” w katalogu głównym źródła. W tej chwili wygląda na to, że plik znajduje się bezpośrednio w katalogu źródłowym. Stwórz więc odpowiedni katalog i przenieś tam plik.

Zwróć uwagę, że zwykle pakiety są pisane małymi literami i zawierają nazwę Twojej organizacji w odwrotnej kolejności DNS, np

com.foo.devices;
Jon Skeet
źródło
3
@Sakti: Nie możesz, o ile wiem, i zdecydowanie odradzam ci, nawet gdybyś mógł. Wszyscy doświadczeni programiści Java będą oczekiwać przestrzegania normalnych konwencji.
Jon Skeet,
88

Spróbuj zamknąć i ponownie otworzyć plik.

Ten błąd może wystąpić podczas zaćmienia, gdy nie ma absolutnie nic złego w lokalizacji pliku lub deklaracji pakietu. Wypróbuj to, zanim spędzisz dużo czasu na wypróbowaniu innych rozwiązań. Czasami zaćmienie jest po prostu zdezorientowane. U mnie to działało przy wielu okazjach. Mam kredyt pomysł na Joshua Goldberg .

candied_orange
źródło
2
Miałem ten problem z projektem Gradle w programie VS Code. Ponowne otwarcie naprawiło to.
TastyWheat
1
otwarcie i zamknięcie pliku w edytorze zaćmień pomogło rozwiązać problem. Dodałem folder źródłowy w konfiguracji java config - zakładka source, błąd nie został usunięty, ale kiedy zamknąłem i otworzyłem edytor w eclipse, pomogło. :-)
JassJava
Wyjście i ponowne uruchomienie Eclipse również rozwiązało problem.
Don Smith
he he ... Spędziłem godzinę próbując to naprawić, a potem to zobaczyłem.
Vikash
44

Rozwiązanie 1: Jedno rozwiązanie, które zadziałało, gdy pojawił się ten błąd „ Zadeklarowany pakiet nie pasuje do oczekiwanego pakietu ” dla projektu, który pobrałem z eclipse CVS:

1. Kliknij projekt prawym przyciskiem myszy na pasku nawigacji i kliknij 'usuń'
2.Upewnij się, że opcja ' Usuń zawartość projektu z dysku ' NIE jest zaznaczona i kliknij OK.
3. Teraz po usunięciu projektu przejdź do Plik -> Importuj -> Ogólne -> Istniejące projekty do obszaru roboczego
4. Wybierz swój obszar roboczy z listy katalogów i zaznacz pole obok nazwy projektu. Kliknij „ Zakończ

Rozwiązanie 2: Po raz kolejny otrzymałem ten błąd z następującym komunikatem

Błędy kompilacji Eclipse - nie można rozwiązać obiektu java.lang.Object Musiałem skorzystać z innej trasy, o której wspomniano tutaj, a błąd zniknął.

W międzyczasie obejście polega na usunięciu biblioteki systemowej JRE z projektu, a następnie ponownym dodaniu jej. Oto kroki:

  1. Przejdź do właściwości projektu z błędem kompilacji (kliknij prawym przyciskiem myszy> Właściwości) Wyświetl kartę „Biblioteki” w sekcji „Ścieżka kompilacji” Znajdź na liście „Bibliotekę systemową JRE” (jeśli jej nie ma, to ten komunikat o błędzie nie jest błąd zaćmienia, ale źle skonfigurowany projekt)
  2. Usuń „Bibliotekę systemową JRE”
  3. Kliknij „Dodaj bibliotekę…”, wybierz „Bibliotekę systemową JRE” i dodaj odpowiednie środowisko JRE dla projektu (np. „Domyślne środowisko JRE obszaru roboczego”)
  4. Kliknij „Zakończ” w wyborze biblioteki i „OK” we właściwościach projektu, a następnie poczekaj na odbudowę projektu

Mam nadzieję, że błąd zostanie rozwiązany ...

nanospeck
źródło
Ja też musiałem to zrobić (dodanie katalogu groovy testów do kompilacji). Nie zapomnij zanotować konfiguracji biegu, które trzeba będzie odtworzyć. Masz jakiś pomysł, dlaczego jest to potrzebne? Taki ból.
Joshua Goldberg,
11
Prostsze rozwiązanie: znowu znalazłem się w tej sytuacji i mogłem go uruchomić, zamykając projekt, ponownie uruchamiając Eclipse i ponownie otwierając projekt.
Joshua Goldberg,
12
Jeszcze prostsze! Po prostu miałem go ponownie i zniknął, zamykając i ponownie otwierając edytor pojedynczego problematycznego pliku.
Joshua Goldberg
4
Wydaje się, że ponowne uruchomienie zaćmienia rozwiązuje problem.
Mike R
Rozwiązanie 1 zadziałało dla mnie. Bardzo dziwne. Zaimportowałem ten sam klon gita do Eclipse na innych komputerach i nie widziałem tego problemu.
dnuttle
13

Rozwiązałem problem, wykonując następujące kroki:

  1. Wybierz projekt - kliknij prawym przyciskiem myszy - ścieżka budowania java.

  2. W zakładce Źródło - możliwość zmiany srcna src/main/java.

  3. Eclipse zmieni kolejność całego projektu.

dafali
źródło
11

Miałem ten problem - inne klasy w moim pakiecie były w porządku, ale jedna klasa miała błąd przeciwko temu. Nie było nic złego w deklaracji paczki.

Naprawiłem to robiąc refactor->movei tymczasowo przeniosłem klasę do innego pakietu, a następnie z refactor->movepowrotem do oryginalnego pakietu.

ayahuasca
źródło
2

Musisz mieć klasę w folderze Devices.

Marcelo
źródło
2

Utwórz nowy pakiet w ramach swojego projektu o nazwie „Urządzenia” i umieść w nim swoją klasę. Jest to odpowiednik umieszczenia klasy w katalogu o nazwie „Urządzenia” w folderze źródłowym projektu.

tskuzzy
źródło
1

Upewnij się, że Devicesjest zdefiniowany jako folder źródłowy we właściwościach projektu.

Adam Matan
źródło
1

Wystąpił ten sam rodzaj błędu, ale mój pakiet był całkowicie poprawny. Kiedy właśnie zamknąłem i otworzyłem mój edytor, błąd znika. Mam nadzieję, że może to pomóc w niektórych scenariuszach.

Easwaramoorthy K
źródło
1

Naprawiłem to, usuwając atrybut „wykluczający” dla tego pakietu w moim .classpathpliku. Usuń atrybut, a nie cały tag, w przeciwnym razie „src / java” przestanie być folderem źródłowym.

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>
Noumenon
źródło
1

Ten problem został rozwiązany przez podanie nazwy pakietu

Przeniosłem plik Test_Steps.java, który znajdował się w pakiecie stepDefinition

wprowadź opis obrazu tutaj

po prostu dodając pakiet stepDefinition problem został rozwiązany

Więc ten problem może wystąpić, gdy masz pakiet i nie używasz go w pliku klasy.

Dodanie go rozwiązało problem i błąd już się nie pojawiał.

wprowadź opis obrazu tutaj

Gaurav khurana
źródło
0

Upewnij się, że utworzyłeś poprawny pakiet, możesz mieć szansę na utworzenie folderu zamiast pakietu

Karthick
źródło
0
  1. Utwórz katalog [nazwa.projektu] w katalogu głównym obszaru roboczego projektu.

  2. Skopiuj * .java z „src” do tego katalogu.

  3. Zamknij i ponownie otwórz projekt.

B347tl7
źródło
0

Zdarzyło mi się to, gdy sprawdzałem projekt z repozytorium svn w Eclipse. W moim folderze .m2 znajdowały się pliki jar, na które eclipse nie patrzył. Aby rozwiązać problem, który zrobiłem:

kliknij prawym przyciskiem folder projektu Konfiguruj> Konwertuj na projekt Maven

i to rozwiązało problem.

carl_corder
źródło
0

Jest milion odpowiedzi, ale oto kolejna: skopiuj pliki do nowego pakietu, usuń stary pakiet i zmień nazwę nowego pakietu na nazwę starego pakietu.

Omri374
źródło
0

Upewnij się, że nie używasz domyślnego pakietu. Utwórz nowy pakiet o nazwie „urządzenia”, skopiuj do niego ten kod i użyj.


źródło
0

Miałem takie sytuacje, kiedy kopiowałem klasy z innych pakietów / projektów.

Menu-> Projekt-> Wyczyść zwykle pomaga.

yurin
źródło
0

W moim przypadku wybrałem znacznik błędu w zakładce Problemy i usunąłem go, ponieważ główna metoda pliku Java była wykonywana poprawnie. To pewna usterka w Eclipse Neon z wieloma zainstalowanymi wtyczkami.

Leniel Maccaferri
źródło
0

Miałem też do czynienia z tym problemem, kiedy importowałem istniejący projekt do Eclipse. To był projekt gradle, ale podczas importowania zaimportowałem go jako zwykły projekt, klikając Ogólne-> Istniejące projekty do obszaru roboczego. Aby rozwiązać ten problem, dodałem Gradle nature do projektu przez :::: Kliknij prawym przyciskiem myszy folder Project -> Configure-> Add Gradle Nature

Gopi
źródło
0

Używałem Spring Tool Suite 4. Nie mogłem rozwiązać problemu. Struktura katalogów była zgodna z nazwą pakietu.

Ale sprzątanie projektu pomogło mi.

prisar
źródło
0

Miałem ten sam problem z projektem maven w Eclipse IDE. Udało mi się go rozwiązać, zastępując plik .classpath odpowiednim formatem. Po wymianie zamknij i otwórz projekt.

Przykładowy plik .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>
gihan-maduranga
źródło