Il pacchetto dichiarato non corrisponde al pacchetto previsto ""


89

Sto usando Eclipse e non uso Java da un po 'di tempo. Tuttavia, posso compilare il mio codice sulla riga di comando e generare i .classfile necessari . In Eclipse, se ne lamenta The declared package "Devices" does not match the expected package "". Cosa significa e come posso risolverlo?

Codice d'esempio:

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

Il nome del mio progetto è DeviceDDS.


2
Questa classe è nella /src/Convertersdirectory?
Jeremy

6
Se hai intenzione di cambiare la tua domanda in modo retrospettivo (il che sembra inutile, ad essere onesti) devi essere coerente al riguardo: non hai modificato il primo paragrafo della domanda. Hai anche fatto sembrare strani tutti i commenti. Perché cambiare tutto, quasi un anno e mezzo dopo?
Jon Skeet

Risposte:


52

Eclipse si aspetta che il pacchetto dichiarato corrisponda alla gerarchia di directory, quindi si aspetta che il tuo file Java si trovi in ​​una directory chiamata "Devices" sotto la tua root di origine. Al momento sembra che il file sia direttamente nella tua root di origine. Quindi crea la directory appropriata e sposta il file lì dentro.

Nota che convenzionalmente, i pacchetti sono in minuscolo e includono il nome della tua organizzazione in ordine DNS inverso, ad es

com.foo.devices;

3
@ Sakti: Per quanto ne so, non puoi e ti consiglio caldamente di non farlo anche se potessi. Tutti gli sviluppatori Java esperti si aspettano che tu segua le normali convenzioni.
Jon Skeet

88

Prova a chiudere e riaprire il file.

È possibile ottenere questo errore in eclipse quando non c'è assolutamente nulla di sbagliato nella posizione del file o nella dichiarazione del pacchetto. Provalo prima di dedicare molto tempo a provare queste altre soluzioni. A volte eclipse si confonde. Ha funzionato per me in diverse occasioni. Attribuisco l'idea a Joshua Goldberg .


2
Ha avuto questo problema con un progetto Gradle all'interno di VS Code. Riapri risolto.
TastyWheat

1
l'apertura e la chiusura del file nell'editor di eclipse ha aiutato a risolvere il problema. Avevo aggiunto una cartella di origine nella configurazione di java config - scheda origine, l'errore non è stato rimosso, ma quando ho chiuso e aperto l'editor in eclipse, è stato d'aiuto. :-)
JassJava

Anche l'uscita e il riavvio di eclipse hanno risolto il problema.
Don Smith,

he he .. Ho passato un'ora a cercare di aggiustarlo e poi ho visto questo.
Vikash,

44

Soluzione 1: una soluzione che ha funzionato per me quando questo errore " Il pacchetto dichiarato non corrisponde al pacchetto previsto " si è verificato per un progetto che ho estratto da eclipse CVS:

1. Fare clic con il pulsante destro del mouse sul progetto nella barra di navigazione e fare clic su "Elimina"
2.Assicurarsi che l'opzione " Elimina contenuto del progetto su disco " NON sia selezionata e fare clic su OK.
3.Ora dopo che il progetto è stato cancellato, vai su File -> Importa -> Generale -> Progetti esistenti nello spazio di lavoro
4.Seleziona il tuo spazio di lavoro dall'elenco delle directory e seleziona la casella accanto al nome del tuo progetto. Fare clic su " Fine "

Soluzione 2: ancora una volta ho ricevuto questo errore con il seguente messaggio

Errori di compilazione Eclipse: java.lang.Object non può essere risolto Ho dovuto seguire un altro percorso menzionato qui e l'errore è scomparso.

Nel frattempo, la soluzione è rimuovere la libreria di sistema JRE dal progetto e quindi aggiungerla di nuovo. Ecco i passaggi:

  1. Vai alle proprietà del progetto con l'errore di compilazione (clic destro> Proprietà) Visualizza la scheda "Librerie" nella sezione "Percorso di creazione" Trova la "Libreria di sistema JRE" nell'elenco (se manca, questo messaggio di errore non è un bug di eclissi ma progetto mal configurato)
  2. Rimuovi la "Libreria di sistema JRE"
  3. Premi "Aggiungi libreria ...", seleziona "Libreria di sistema JRE" e aggiungi il JRE appropriato per il progetto (ad es. "JRE predefinito dell'area di lavoro")
  4. Premi "Fine" nella selezione della libreria e "OK" nelle proprietà del progetto, quindi attendi la ricostruzione del progetto

Si spera che l'errore venga risolto ...


Ho dovuto fare anche questo (aggiungendo una directory di test groovy alla build). Non dimenticare di prendere appunti sulle configurazioni della corsa, che dovrai ricreare. Qualche idea sul perché sia ​​necessario? Un tale dolore.
Joshua Goldberg

11
Soluzione più semplice: mi trovavo di nuovo in questa situazione e sono riuscito a farlo funzionare chiudendo il progetto, riavviando Eclipse e riaprendo il progetto.
Joshua Goldberg

12
Ancora più semplice! L'ho appena avuto di nuovo ed è andato via chiudendo e riaprendo l'editor del singolo file problematico.
Joshua Goldberg

4
Il riavvio di eclipse sembra risolverlo.
Mike R

La soluzione 1 ha funzionato per me. Molto strano. Ho importato lo stesso clone git in Eclipse su altre macchine e non ho riscontrato questo problema.
navetta

13

Ho risolto il problema seguendo questi passaggi:

  1. Seleziona il progetto - Fai clic con il pulsante destro del mouse - Percorso build java.

  2. Nella scheda sorgente - si cambia srcin src/main/java.

  3. Eclipse riordinerà tutto il progetto.


11

Ho avuto questo problema: le altre classi all'interno del mio pacchetto andavano bene, ma una classe aveva l'errore contro di essa. Non c'era niente di sbagliato nella dichiarazione del pacchetto.

L'ho risolto facendo refactor->movee spostato temporaneamente la classe su un altro pacchetto, quindi di refactor->movenuovo sul pacchetto originale.


2

Devi avere la classe all'interno di una cartella Devices.


2

Crea un nuovo pacchetto sotto il tuo progetto chiamato "Dispositivi" e inseriscici la tua classe. Ciò equivale alla classe che viene inserita in una directory chiamata "Devices" nella cartella dei sorgenti del progetto.


1

Assicurati che Devicessia definita come cartella di origine nelle proprietà del progetto.


1

Ho ricevuto lo stesso tipo di errore ma il mio pacchetto era assolutamente corretto. Quando ho appena chiuso e aperto il mio editor, l'errore scompare. Spero che questo possa aiutare in alcuni scenari.


1

Ho risolto questo problema rimuovendo un attributo "escluso" per quel pacchetto nel mio .classpathfile. Rimuovi l'attributo, non l'intero tag, altrimenti "src / java" cesserà di essere una cartella di origine.

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>

1

Questo problema è stato risolto menzionando il nome del pacchetto

Ho spostato il mio file Test_Steps.java che era nel pacchetto stepDefinition

inserisci qui la descrizione dell'immagine

semplicemente aggiungendo il pacchetto stepDefinition il problema è stato risolto

Quindi questo problema può verificarsi quando si dispone di un pacchetto e non si utilizza nel file di classe.

L'aggiunta ha risolto il problema e l'errore non veniva più visualizzato.

inserisci qui la descrizione dell'immagine


0

Assicurati di aver creato un pacchetto corretto. Potresti avere la possibilità di creare una cartella invece del pacchetto


0
  1. Crea la directory [your.project.name] nella directory principale dell'area di lavoro del tuo progetto.

  2. Copia * .java da "src" a quella directory.

  3. Chiudi e riapri il progetto.


0

Questo è successo a me quando stavo controllando un progetto da un repository svn in eclipse. C'erano file jar nella mia cartella .m2 che eclipse non stava guardando. Per risolvere il problema ho fatto:

fare clic con il pulsante destro del mouse sulla cartella del progetto Configura> Converti in progetto Maven

e questo ha risolto il problema.


0

Ci sono un milione di risposte, ma eccone un'altra: copia i file in un nuovo pacchetto, elimina il vecchio pacchetto e rinomina il nuovo pacchetto con il nome del vecchio pacchetto.


0

Assicurati di non utilizzare il pacchetto predefinito. Crea un nuovo pacchetto con il nome "dispositivi" e copia questo codice al suo interno e usalo.


0

Ho avuto questo tipo di situazioni quando ho copiato classi da altri pacchetti / progetti.

Menu-> Progetto-> Pulisci di solito aiuta.


0

Nel mio caso ho selezionato l'indicatore di errore nella scheda Problemi e l'ho eliminato poiché il metodo principale del file Java veniva eseguito correttamente. Questo è un problema tecnico in Eclipse Neon con la moltitudine di plugin che ha installato.


0

Ho affrontato anche questo problema quando avevo importato un progetto esistente in Eclipse. Era un progetto gradle, ma durante l'importazione l'ho importato come progetto normale facendo clic su Generale-> Progetti esistenti in Workspace. Per risolvere il problema ho aggiunto Gradle nature al progetto :::: Fare clic con il tasto destro sulla cartella del progetto -> Configura-> Aggiungi Gradle Nature


0

Stavo usando Spring Tool Suite 4. Non sono riuscito a capire il problema. La struttura della directory era in base al nome del pacchetto.

Ma la pulizia del progetto mi ha aiutato.


0

Ho avuto lo stesso problema con un progetto esperto in Eclipse IDE. Sono stato in grado di risolverlo sostituendo il file .classpath con il formato corretto. Dopo la sostituzione, chiudi e apri il progetto.

File .classpath di esempio

<?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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.