El paquete declarado no coincide con el paquete esperado ""

89

Estoy usando Eclipse y no he usado Java por algún tiempo. Sin embargo, puedo compilar mi código en la línea de comandos sin problemas y generar los .classarchivos necesarios . En Eclipse, se queja de eso The declared package "Devices" does not match the expected package "". ¿Qué significa esto y cómo puedo solucionarlo?

Código de muestra:

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

El nombre de mi proyecto es DeviceDDS.

Marcel Korpel
fuente
2
¿Está esta clase en el /src/Convertersdirectorio?
Jeremy
6
Si va a cambiar su pregunta retrospectivamente (lo que parece inútil, para ser honesto), debe ser coherente al respecto: no ha editado el primer párrafo de la pregunta. También has hecho que todos los comentarios parezcan extraños. ¿Por qué cambiar todo, casi un año y medio después?
Jon Skeet

Respuestas:

52

Eclipse espera que el paquete declarado coincida con la jerarquía de directorios, por lo que espera que su archivo Java esté en un directorio llamado "Dispositivos" en la raíz de su fuente. Por el momento, parece que el archivo está directamente en la raíz de su fuente. Así que cree el directorio apropiado y mueva el archivo allí.

Tenga en cuenta que, convencionalmente, los paquetes están en minúsculas e incluyen el nombre de su organización en orden DNS inverso, p. Ej.

com.foo.devices;
Jon Skeet
fuente
3
@Sakti: Hasta donde yo sé, no puedes, y te recomiendo encarecidamente que no lo hagas aunque puedas. Todos los desarrolladores experimentados de Java esperarán que siga las convenciones habituales.
Jon Skeet
88

Intente cerrar y volver a abrir el archivo.

Es posible obtener este error en eclipse cuando no hay absolutamente nada de malo con la ubicación del archivo o la declaración del paquete. Pruébelo antes de pasar mucho tiempo probando estas otras soluciones. A veces, el eclipse simplemente se confunde. Me ha funcionado en varias ocasiones. Le doy el crédito a la idea de Joshua Goldberg .

naranja_congelada
fuente
2
Tuve este problema con un proyecto de Gradle dentro de VS Code. Reabrir lo arregló.
TastyWheat
1
abrir y cerrar el archivo en el editor de eclipse ayudó a resolver el problema. Había agregado una carpeta de origen en la compilación de configuración de java - pestaña de origen, el error no se eliminó, pero cuando cerré y abrí el editor en eclipse, ayudó. :-)
JassJava
Salir y reiniciar eclipse también solucionó el problema.
Don Smith
jejeje .. Pasé una hora tratando de arreglarlo y luego vi esto.
Vikash
44

Solución 1: Una solución que funcionó para mí cuando se produjo este error " El paquete declarado no coincide con el paquete esperado " para un proyecto que verifiqué en eclipse CVS:

1.Haga clic derecho en el proyecto en la barra de navegación y haga clic en 'eliminar'
2.Asegúrese de que la opción ' Eliminar el contenido del proyecto en el disco ' NO esté marcada y haga clic en Aceptar.
3. Ahora, después de eliminar el proyecto, vaya a Archivo -> Importar -> General -> Proyectos existentes en el espacio de trabajo
4. Seleccione su espacio de trabajo en la lista del directorio y marque la casilla junto al nombre de su proyecto. Haga clic en ' Finalizar '

Solución 2: una vez más recibí este error con el siguiente mensaje

Errores de compilación de Eclipse: java.lang.Object no se puede resolver Tuve que seguir otra ruta mencionada aquí y el error desapareció.

Mientras tanto, la solución consiste en eliminar la biblioteca del sistema JRE del proyecto y luego volver a agregarla. Estos son los pasos:

  1. Vaya a las propiedades del proyecto con el error de compilación (haga clic con el botón derecho> Propiedades). Vea la pestaña "Bibliotecas" en la sección "Ruta de compilación". Busque la "Biblioteca del sistema JRE" en la lista (si falta, este mensaje de error no es un error de eclipse pero un proyecto mal configurado)
  2. Eliminar la "Biblioteca del sistema JRE"
  3. Haga clic en "Agregar biblioteca ...", seleccione "Biblioteca del sistema JRE" y agregue el JRE apropiado para el proyecto (por ejemplo, 'JRE predeterminado del espacio de trabajo')
  4. Pulse "Finalizar" en la selección de la biblioteca y "Aceptar" en las propiedades del proyecto y luego espere la reconstrucción del proyecto.

Ojalá se resuelva el error ...

nanopartículas
fuente
Tuve que hacer esto también (agregando un directorio de pruebas geniales a la compilación). No olvide tomar notas sobre las configuraciones de ejecución, que deberá volver a crear. ¿Alguna idea de por qué es necesario? Que problematico.
Joshua Goldberg
11
Solución más simple: estaba nuevamente en esta situación y pude hacer que funcionara cerrando el proyecto, reiniciando Eclipse y volviendo a abrir el proyecto.
Joshua Goldberg
12
¡Aún más simple! Lo acabo de tener de nuevo y desapareció cerrando y volviendo a abrir el editor del archivo problemático único.
Joshua Goldberg
4
Reiniciar eclipse parece solucionarlo.
Mike R
La solución 1 funcionó para mí. Muy raro. He importado el mismo clon de git en Eclipse en otras máquinas y no he visto este problema.
dnuttle
13

Resolví el problema siguiendo estos pasos:

  1. Seleccione el proyecto - Haga clic con el botón derecho - ruta de compilación java.

  2. En la pestaña de fuente, cambia srca src/main/java.

  3. Eclipse reordenará todo el proyecto.

dafali
fuente
11

Tuve este problema: las otras clases dentro de mi paquete estaban bien, pero una clase tenía el error en su contra. No hubo nada de malo en la declaración del paquete.

Lo arreglé haciéndolo refactor->movey moví la clase a otro paquete temporalmente, luego de refactor->movevuelta al paquete original.

ayahuasca
fuente
2

Necesitas tener la clase dentro de una carpeta Devices.

Marcelo
fuente
2

Cree un nuevo paquete en su proyecto llamado "Dispositivos" y coloque su clase en él. Esto es equivalente a colocar la clase en un directorio llamado "Dispositivos" en la carpeta de origen de su proyecto.

tskuzzy
fuente
1

Asegúrese de que Devicesesté definido como carpeta de origen en las propiedades del proyecto.

Adam Matan
fuente
1

Recibí el mismo tipo de error, pero mi paquete era absolutamente correcto. Cuando acabo de cerrar y abrir mi editor, el error desaparece. Espero que esto pueda ayudar en algunos escenarios.

Easwaramoorthy K
fuente
1

Solucioné esto eliminando un atributo "excluyente" para ese paquete en mi .classpatharchivo. Elimine el atributo, no toda la etiqueta, o "src / java" dejará de ser una carpeta de origen.

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

Este problema se resolvió al mencionar el nombre del paquete.

Moví mi archivo Test_Steps.java que estaba en el paquete stepDefinition

ingrese la descripción de la imagen aquí

con solo agregar el paso del paquete Definición, el problema se resolvió

Entonces, este problema puede ocurrir cuando tiene un paquete y no lo está usando en su archivo de clase.

Agregarlo resolvió el problema y el error ya no aparecía.

ingrese la descripción de la imagen aquí

Gaurav Khurana
fuente
0

Asegúrese de haber creado un paquete correcto. Es posible que tenga la oportunidad de crear una carpeta en lugar de un paquete.

Karthick
fuente
0
  1. Cree el directorio [your.project.name] en el directorio raíz del espacio de trabajo de su proyecto.

  2. Copie * .java de "src" a ese directorio.

  3. Cierre y vuelva a abrir el proyecto.

B347tl7
fuente
0

Esto me sucedió cuando estaba revisando un proyecto de un repositorio svn en eclipse. Había archivos jar en mi carpeta .m2 que Eclipse no estaba mirando. Para solucionar el problema que hice:

haga clic con el botón derecho en la carpeta del proyecto Configurar> Convertir a proyecto Maven

y eso resolvió el problema.

carl_corder
fuente
0

Hay un millón de respuestas, pero aquí hay otra: copie los archivos en un nuevo paquete, elimine el paquete anterior y cambie el nombre del nuevo paquete al nombre del paquete anterior.

Omri374
fuente
0

Asegúrese de no utilizar el paquete predeterminado. Cree un nuevo paquete con el nombre 'dispositivos' y copie este código dentro de él y use.


fuente
0

Tuve este tipo de situaciones cuando copié clases de otros paquetes / proyectos.

Menú-> Proyecto-> Limpiar normalmente ayuda.

yurin
fuente
0

En mi caso, seleccioné el marcador de error en la pestaña Problemas y lo eliminé ya que el método principal del archivo de Java se estaba ejecutando correctamente. Esa es una falla en Eclipse Neon con la multitud de complementos que ha instalado.

Leniel Maccaferri
fuente
0

También enfrenté este problema cuando importé un proyecto existente para eclipse. Era un proyecto de Gradle, pero mientras lo importaba, lo importé como proyecto normal haciendo clic en General-> Proyectos existentes en el espacio de trabajo. Para resolver el problema, agregué la naturaleza de Gradle al proyecto mediante :::: Haga clic con el botón derecho en la carpeta Proyecto -> Configurar-> Agregar naturaleza de Gradle

Gopi
fuente
0

Estaba usando Spring Tool Suite 4. No pude resolver el problema. La estructura del directorio estaba de acuerdo con el nombre del paquete.

Pero limpiar el proyecto me ayudó.

prisar
fuente
0

Tuve el mismo problema con un proyecto maven en Eclipse IDE. Pude resolverlo reemplazando el archivo .classpath con el formato correcto. Después de reemplazarlo, cierre y abra el proyecto.

Ejemplo de archivo .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
fuente