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.


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;

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 .


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 ...


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.


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.



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.


1

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


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.


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"/>

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


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


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.


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.


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.


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.


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.


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.


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


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é.


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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.