Error de Java: solo se puede importar un tipo. XYZ se resuelve en un paquete

Me aparece el error: “Solo se puede importar un tipo. XYZ se resuelve en un paquete”.

Alguien ha explicado la causa aquí, pero no estoy seguro de lo que se supone que haga para arreglar esto. FYI: estoy usando Eclipse. He agregado el código que importa a continuación. La importación java.util. * Funciona bien.

   <% CategoryDao catDao = new CategoryDao(); ArrayList catList = catDao.selectCategory(); // %> 

Editar: el error real está a continuación:

  org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 7 in the generated java file Only a type can be imported. org.eresearch.knowledgeportal.model.Category resolves to a package 

Bueno, en realidad no estás proporcionando suficientes detalles sobre tu aplicación web, pero supongo que tienes una JSP con algo así:

 <%@ page import="java.util.*,xyZ"%> 

Y xyZ no se puede encontrar en el classpath (es decir, no está presente en WEB-INF/classes ni en un JAR de WEB-INF/lib ).

Verifique que la GUERRA que implemente en Tomcat tenga la siguiente estructura:

 my-webapp |-- META-INF | `-- MANIFEST.MF |-- WEB-INF | |-- classes | | |-- x | | | `-- y | | | `-- Z.class | | `-- another | | `-- packagename | | `-- AnotherClass.class | |-- lib | | |-- ajar.jar | | |-- bjar.jar | | `-- zjar.jar | `-- web.xml |-- a.jsp |-- b.jsp `-- index.jsp 

O que el JAR que agrupa a xyZclass está presente en WEB-INF/lib .

OK, acabo de resolverlo. En la última importación, agregué un “;” copiando otros ejemplos de código. Supongo que es la terminación de línea estándar que se requiere.

Asi que

 <%@ page import="java.util.*" %> <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %> <%@ page import="org.eresearch.knowledgeportal.model.Category" %> 

convirtió

  <%@ page import="java.util.*" %> <%@ page import="org.eresearch.knowledgeportal.dao.CategoryDao" %> <%@ page import="org.eresearch.knowledgeportal.model.Category;" %> 

Si deletrea incorrectamente el nombre de la clase o si la clase no está en la ruta de clase, el procesador JSP dirá que “se resuelve en un paquete” en lugar de que no exista. Esto me estaba volviendo loco hoy ya que no veía un error tipográfico que había hecho.

Sin más detalles, suena como un error en la statement de importación de una clase. Verifique, si todas las declaraciones de importación importan todas las clases desde un paquete o una sola clase:

 import all.classes.from.package.*; import only.one.type.named.MyClass; 

Editar

OK, después de la edición, parece que es un problema jsp.

Editar 2

Aquí hay otra entrada al foro , el problema parece tener similitudes y la víctima lo resolvió reinstalando el eclipse. Primero probaría eso: instalar una segunda instancia de eclipse con solo los complementos más necesarios, un nuevo espacio de trabajo, el proyecto importado en ese espacio de trabajo limpio, y esperar lo mejor …

Recibí este error en Netbeans. Al igual que con la mayoría de los errores extraños como este que aparecen de la nada, lo resuelvo yendo a las propiedades del proyecto, cambiando el Formato Fuente / Binario (no importa qué, solo algo diferente) y haciendo una limpieza y comstackción.

Lo resolví agregando los archivos jar en el directorio lib de tomcat.

Experimenté este extraño error también, después de cambiar el caso de la letra en el nombre de una clase. El archivo no se copió en un servidor tomcat como se esperaba, tuve que eliminarlo manualmente y volver a desplegarlo. ¿Tal vez porque uso el sistema operativo insensible a mayúsculas y minúsculas?

Sé que es demasiado tarde para responder a esta publicación, pero como no veo una respuesta clara, lo haría de todos modos …

es posible que desee ver el MANIFEST.MF en META-INF en su eclipse.

entonces puede que necesites agregar la ruta de tus archivos de clase como …

Class-Path: WEB-INF/classes

genere el archivo .class por separado y péguelo en el paquete relevante en el espacio de trabajo. Refresh Project.

Para mí fue una implementación incorrecta. Desplegado correctamente, todo funciona (revisa mi pregunta para más detalles).

Tienes que importar algo del paquete, como una clase, una enumeración o una interfaz, así:

 import some.package.SomeClass; 

o bien, importe todo del paquete (no recomendado)

 import some.package.*; 

editar: tal vez no leí lo suficientemente cerca. ¿Dónde está ubicado el paquete que está tratando de importar en el sistema de archivos? ¿Está en WEB-INF / lib?

¿Hay más detalles? (¿Esto está en un JSP como en la página web vinculada?)

Si es así, siempre puedes usar el nombre de clase completamente calificado.
más bien que:

 import foo.bar.*; Baz myBaz; 

puedes usar

 foo.bar.Baz myBaz; 

Tuve un problema similar. En Eclipse comparé mi proyecto con un proyecto de muestra que funciona bien (generado por un arquetipo maven). Encontré que mi proyecto ha perdido 2 líneas en el archivo / classpath. Copié esas 2 líneas y solucionó el problema. Parece que aunque establecí la ruta de comstackción en las preferencias del proyecto, eclipse no se ha actualizado en consecuencia por alguna razón.

     ...  

Mi contribución: recibí este error porque creé un paquete llamado 3lp. Sin embargo, de acuerdo con las especificaciones de Java, no está permitido que su paquete comience con un número. Lo cambié a _3lp, ahora funciona.

Mi apuesta es que tienes un paquete llamado org.ivec.eresearch.knowledgeportal.model. categoría ( c ) y se ejecutan en un sistema de archivos no sensible a mayúsculas y minúsculas, como Windows o Mac. Parece que el comstackdor se confunde cuando existe una clase y un paquete.

Puede renombrar la clase “Categoría” o el paquete “categoría” y este error desaparecerá. Lamentablemente, no estoy seguro de si se trata de un error Tomcat o ECJ.

Si usa Maven y empaqueta sus clases de Java como JAR, asegúrese de que el JAR esté actualizado. Aún asumo que JAR está en tu classpath por supuesto.

Lo resolví agregando el archivo jar que contiene las clases importadas a WEB-INF/Lib .

¿Estás intentando importar una clase reemplazada como yo?

Si es así, su clase invalidada está en el paquete incorrecto o simplemente no existe.

Crear o mover la clase a la ubicación correcta (src / [package.package]. [Class]) podría resolver su problema.

Esto suele ocurrir al mezclar (en la misma página jsp) la importación jsp estática:

 <%@include file="... 

con la importación dinámica de jsp:

  esto genera la excepción: "Solo se puede importar un tipo ..." 

Tuve el mismo mensaje de error y mi manera de manejarlo es la siguiente:

  1. Primero vaya al directorio de archivos donde su Tomcat está publicando su aplicación web, por ejemplo, D: \ Java \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ myDatatable \ WEB-INF \ classes, en que normalmente ponemos nuestras clases. Si este no es el lugar donde colocaste tus clases, entonces debes averiguar dónde está de manera predeterminada haciendo clic con el botón derecho en el nombre de raíz de tu aplicación web -> Crear ruta de acceso -> Configurar baño de construcción … -> Luego, verifica la pestaña “Fuente” y descubra el valor de campo de “Carpeta de salida predeterminada”. Este será el lugar donde Tomcat puso sus clases.
  2. Vería que la clase XYZ aún no está construida. Para construirlo, puede ir al Menú “Proyecto” -> “Limpiar …” -> Seleccione su aplicación web para limpiar.
  3. Una vez que se haya completado, intente reiniciar su servidor Tomcat e ir a revisar el directorio de archivos nuevamente. Tu clase debería estar allí. Al menos funciona para mí. Espero eso ayude.