Le package déclaré ne correspond pas au package attendu ""

89

J'utilise Eclipse et je n'ai pas utilisé Java depuis un certain temps. Cependant, je peux très bien compiler mon code sur la ligne de commande et générer les .classfichiers nécessaires . Dans Eclipse, on s'en plaint The declared package "Devices" does not match the expected package "". Qu'est-ce que cela signifie et comment puis-je y remédier?

Exemple de code:

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

Le nom de mon projet est DeviceDDS.

Marcel Korpel
la source
2
Cette classe est-elle dans le /src/Convertersrépertoire?
Jeremy
6
Si vous voulez changer votre question rétrospectivement (ce qui semble inutile, pour être honnête), vous devez être cohérent à ce sujet - vous n'avez pas modifié le premier paragraphe de la question. Vous avez également rendu tous les commentaires étranges. Pourquoi tout changer, près d'un an et demi plus tard?
Jon Skeet

Réponses:

52

Eclipse s'attend à ce que le package déclaré corresponde à la hiérarchie des répertoires - il s'attend donc à ce que votre fichier Java se trouve dans un répertoire appelé "Devices" sous votre racine source. Pour le moment, il semble que le fichier se trouve directement dans votre racine source. Créez donc le répertoire approprié et déplacez-y le fichier.

Notez que par convention, les packages sont en minuscules et incluent le nom de votre organisation dans l'ordre DNS inverse, par exemple

com.foo.devices;
Jon Skeet
la source
3
@Sakti: Vous ne pouvez pas pour autant que je sache, et je vous conseille fortement de ne pas le faire même si vous le pouvez. Tous les développeurs Java expérimentés s'attendront à ce que vous suiviez les conventions normales.
Jon Skeet
88

Essayez de fermer et de rouvrir le fichier.

Il est possible d'obtenir cette erreur dans eclipse lorsqu'il n'y a absolument rien de mal avec l'emplacement du fichier ou la déclaration du package. Essayez cela avant de passer beaucoup de temps à essayer ces autres solutions. Parfois, l'éclipse devient confuse. Cela a fonctionné pour moi à plusieurs reprises. J'attribue l'idée à Joshua Goldberg .

candied_orange
la source
2
J'ai eu ce problème avec un projet Gradle dans VS Code. Rouvrir l'a corrigé.
TastyWheat
1
l'ouverture et la fermeture du fichier dans l'éditeur d'éclipse ont aidé à résoudre le problème. J'avais ajouté un dossier source dans java config build - onglet source, l'erreur n'a pas été supprimée, mais lorsque j'ai fermé et ouvert l'éditeur dans eclipse, cela a aidé. :-)
JassJava
Quitter et redémarrer eclipse a également résolu le problème.
Don Smith le
he he ... J'ai passé une heure à essayer de le réparer et j'ai vu ça.
Vikash
44

Solution 1: Une solution qui a fonctionné pour moi lorsque cette erreur " Le package déclaré ne correspond pas au package attendu " s'est produite pour un projet que j'ai extrait de eclipse CVS:

1.Cliquez avec le bouton droit sur le projet dans la barre de navigation et cliquez sur «Supprimer»
2.Assurez-vous que l'option « Supprimer le contenu du projet sur le disque » n'est PAS cochée, puis cliquez sur OK.
3.Maintenant, une fois le projet supprimé, allez dans Fichier -> Importer -> Général -> Projets existants dans l'espace de travail
4.Sélectionnez votre espace de travail dans la liste des répertoires et cochez la case à côté du nom de votre projet. Cliquez sur ' Terminer '

Solution 2: Encore une fois, j'ai eu cette erreur avec le message suivant

Erreurs de construction Eclipse - java.lang.Object ne peut pas être résolu J'ai dû suivre une autre mention d'itinéraire ici et l'erreur a disparu.

En attendant, la solution consiste à supprimer la bibliothèque système JRE du projet, puis à la rajouter. Voici les étapes:

  1. Accédez aux propriétés du projet avec l'erreur de construction (clic droit> Propriétés) Affichez l'onglet "Bibliothèques" dans la section "Chemin de construction" Trouvez la "Bibliothèque système JRE" dans la liste (si elle est manquante, ce message d'erreur n'est pas un eclipse bug mais un projet mal configuré)
  2. Supprimez la «bibliothèque système JRE»
  3. Cliquez sur "Ajouter une bibliothèque ...", sélectionnez "Bibliothèque système JRE" et ajoutez le JRE approprié pour le projet (par exemple, 'Workspace JRE par défaut')
  4. Appuyez sur "Terminer" dans la sélection de la bibliothèque et "OK" dans les propriétés du projet, puis attendez la reconstruction du projet

Espérons que l'erreur sera résolue ...

nanospeck
la source
Je devais le faire aussi (ajouter un répertoire de tests groovy à la construction). N'oubliez pas de prendre des notes sur vos configurations d'exécution, que vous devrez recréer. Une idée pourquoi cela est nécessaire? Une telle douleur.
Joshua Goldberg
11
Solution plus simple: j'étais à nouveau dans cette situation et j'ai pu le faire fonctionner en fermant le projet, en redémarrant Eclipse et en rouvrant le projet.
Joshua Goldberg
12
Encore plus simple! Je viens de l'avoir à nouveau, et il est parti en fermant et en rouvrant l'éditeur du fichier problématique unique.
Joshua Goldberg
4
Le redémarrage de l'éclipse semble le résoudre.
Mike R
La solution 1 a fonctionné pour moi. Très étrange. J'ai importé le même clone git dans Eclipse sur d'autres machines et je n'ai pas vu ce problème.
navette du
13

J'ai résolu le problème en suivant ces étapes:

  1. Sélectionnez le projet - Clic droit - chemin de construction java.

  2. Dans l'onglet source - vous changez le srcen src/main/java.

  3. Eclipse réorganisera tout le projet.

Dafali
la source
11

J'ai eu ce problème - les autres classes de mon package allaient bien, mais une classe avait l'erreur. Il n'y avait rien de mal avec la déclaration du package.

Je l'ai corrigé en faisant refactor->moveet déplacé temporairement la classe vers un autre package, puis de refactor->movenouveau vers le package d'origine.

ayahuasca
la source
2

Vous devez avoir la classe dans un dossier Devices.

Marcelo
la source
2

Créez un nouveau package sous votre projet appelé "Appareils" et placez-y votre classe. Cela équivaut au placement de la classe dans un répertoire appelé «Périphériques» dans le dossier source de votre projet.

tskuzzy
la source
1

Assurez-vous qu'il Devicesest défini comme dossier source dans les propriétés du projet.

Adam Matan
la source
1

J'ai eu le même genre d'erreur mais mon colis était absolument correct. Lorsque je viens de fermer et d'ouvrir mon éditeur, l'erreur disparaît. J'espère que cela pourrait aider dans certains scénarios.

Easwaramoorthy K
la source
1

J'ai corrigé ce problème en supprimant un attribut "excluant" pour ce package dans mon .classpathfichier. Supprimez l'attribut, pas la balise entière, ou "src / java" cessera d'être un dossier source.

<classpathentry excluding="com/myproject/mypackage/mysubpackage/" kind="src" path="src/java"/>
Noumène
la source
1

Ce problème a été résolu en mentionnant le nom du package

J'ai déplacé mon fichier Test_Steps.java qui était sous le package stepDefinition

entrez la description de l'image ici

en ajoutant simplement le package stepDefinition le problème a été résolu

Ce problème peut donc se produire lorsque vous disposez d'un package et que vous n'utilisez pas dans votre fichier de classe.

L'ajouter a résolu le problème et l'erreur n'apparaissait plus.

entrez la description de l'image ici

Gaurav Khurana
la source
0

Assurez-vous que vous avez créé un package correct.Vous pourriez avoir une chance de créer un dossier au lieu d'un package

Karthick
la source
0
  1. Créez le répertoire [your.project.name] dans le répertoire racine de l'espace de travail de votre projet.

  2. Copiez * .java de "src" dans ce répertoire.

  3. Fermez et rouvrez le projet.

B347tl7
la source
0

Cela m'est arrivé lorsque je vérifiais un projet à partir d'un référentiel svn dans eclipse. Il y avait des fichiers jar dans mon dossier .m2 qu'éclipse ne regardait pas. Pour résoudre le problème que j'ai fait:

cliquez avec le bouton droit sur le dossier du projet Configurer> Convertir en projet Maven

et cela a résolu le problème.

carl_corder
la source
0

Il y a un million de réponses, mais en voici une autre: copiez les fichiers dans un nouveau paquet, supprimez l'ancien paquet et renommez le nouveau paquet avec le nom de l'ancien paquet.

Omri374
la source
0

Assurez-vous que vous n'utilisez pas le package par défaut. Créez un nouveau package avec le nom 'devices' et copiez ce code à l'intérieur et utilisez.


la source
0

J'ai eu ce genre de situations lorsque j'ai copié des classes à partir d'autres packages / projets.

Menu-> Projet-> Nettoyer aide généralement.

yurin
la source
0

Dans mon cas, j'ai sélectionné le marqueur d'erreur dans l'onglet Problèmes et je l'ai supprimé car la méthode principale du fichier Java était exécutée correctement. C'est un problème dans Eclipse Neon avec la multitude de plugins qu'il a installés.

Leniel Maccaferri
la source
0

J'ai également rencontré ce problème lorsque j'avais importé un projet existant vers eclipse. C'était un projet gradle, mais lors de l'importation, je l'ai importé en tant que projet normal en cliquant sur Général-> Projets existants dans l'espace de travail. Pour résoudre le problème, j'ai ajouté la nature Gradle au projet en :::: Cliquez avec le bouton droit sur le dossier Projet -> Configurer-> Ajouter Gradle Nature

Gopi
la source
0

J'utilisais Spring Tool Suite 4. Je n'ai pas réussi à résoudre le problème. La structure du répertoire était conforme au nom du package.

Mais le nettoyage du projet m'a aidé.

prisonnier
la source
0

J'ai eu le même problème avec un projet maven dans Eclipse IDE. J'ai pu le résoudre en remplaçant le fichier .classpath par le format correct. Après le remplacement, fermez et ouvrez le projet.

Exemple de fichier .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
la source