Erro de Java: somente um tipo pode ser importado. XYZ resolve um pacote

Eu recebo o erro: “Apenas um tipo pode ser importado. XYZ resolve para um pacote.”

Alguém explicou a causa aqui, mas não tenho certeza do que devo fazer para consertar isso. FYI: Eu estou usando o Eclipse. Eu adicionei o código que faz a importação abaixo. A importação java.util. * Funciona bem.

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

Editar: o erro real está abaixo:

  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 

Bem, você não está realmente fornecendo detalhes suficientes em seu webapp, mas meu palpite é que você tem um JSP com algo assim:

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

E xyZ não pode ser encontrado no caminho de class (ou seja, não está presente em WEB-INF/classs nem em um JAR de WEB-INF/lib ).

Verifique novamente se o WAR que você implementou no Tomcat tem a seguinte estrutura:

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

Ou que o JAR que empacota xyZclass está presente em WEB-INF/lib .

OK, eu apenas resolvi isso. Na última importação, adicionei um “;” copiando outros exemplos de código. Eu acho que é o final da linha padrão que é necessário.

assim

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

passou a ser

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

Se você digitar o nome da class errado ou a class não estiver no caminho de class, o processador JSP dirá “resolve um pacote” em vez de não existir. Isso estava me deixando louca hoje, enquanto eu continuava não vendo um erro de digitação que eu fiz.

Sem mais detalhes, parece um erro na declaração de importação de uma class. Verifique se todas as declarações de importação importam todas as classs de um pacote ou de uma única class:

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

Editar

OK, após a edição, parece que é um problema jsp.

Editar 2

Aqui está outra input no fórum , o problema parece ter semelhanças e a vítima resolveu isso reinstalando o eclipse. Eu tentaria primeiro – instalar uma segunda instância do eclipse com apenas os plugins mais necessários, um novo espaço de trabalho, o projeto importado para aquele espaço de trabalho limpo e esperar pelo melhor …

Eu recebi este erro no Netbeans. Tal como acontece com erros mais bizarros como este que aparecem do nada, resolvo indo para as propriedades do projeto, alterando o Source / Binary Format (não importa o que, apenas algo diferente), e fazendo um clean e build.

Eu resolvi isso adicionando os jars no diretório de lib do tomcat.

Eu experimentei este erro estranho também, depois de mudar o caso de letra no nome de uma class. O arquivo não foi copiado para um servidor de tomcat como esperado, tive que excluí-lo manualmente e reimplantar. Talvez porque eu uso o sistema operacional insensível a maiúsculas e minúsculas?

Eu sei que é meio tarde demais para responder a este post, mas desde que eu não vejo nenhuma resposta clara eu faria de qualquer maneira …

você pode querer verificar o MANIFEST.MF em META-INF no seu eclipse.

então você pode precisar adicionar o caminho de seus arquivos de class como ..

Class-Path: WEB-INF/classs

gere o arquivo .class separado e cole-o no pacote relevante no espaço de trabalho. Atualizar projeto.

Para mim, foi uma implantação errada. Implantado corretamente, tudo funciona (verifique minha pergunta para detalhes).

Você tem que importar algo do pacote, como uma class, enum ou interfacee, assim:

 import some.package.SomeClass; 

ou, importe tudo do pacote (não recomendado)

 import some.package.*; 

edit: talvez eu não tenha lido perto o suficiente. De onde o pacote que você está tentando importar está localizado no sistema de arquivos? Está sob WEB-INF / lib?

Existem mais detalhes? (Isso está em um JSP como na página da Web vinculada?)

Nesse caso, você pode usar apenas o nome completo da class.
ao invés de:

 import foo.bar.*; Baz myBaz; 

você pode usar

 foo.bar.Baz myBaz; 

Eu tive uma questão semelhante. No eclipse, comparei meu projeto com um projeto de amostra que está funcionando bem (gerado por um arquétipo maven). Eu encontrei meu projeto perdeu duas linhas no arquivo /.classpath. Eu copiei essas duas linhas e consertei o problema. Parece que apesar de eu definir o caminho de construção nas preferências do projeto, o eclipse não foi atualizado de acordo por alguns motivos.

 < ?xml version="1.0" encoding="UTF-8"?>    ...  

Minha contribuição: recebi este erro porque criei um pacote chamado 3lp. No entanto, de acordo com as especificações do java, você não tem permissão para nomear seu pacote com um número. Eu mudei para _3lp, agora funciona.

Minha aposta é que você tem um pacote chamado org.ivec.eresearch.knowledgeportal.model. category (small c ) e estão sendo executados em um sistema de arquivos que não diferencia maiúsculas de minúsculas, como Windows ou Mac. Parece que o compilador fica confuso quando existe uma class e um pacote.

Você pode renomear a class “Category” ou o pacote “category” e esse erro desaparecerá. Infelizmente eu não tenho certeza se este é um bug do Tomcat ou ECJ.

Se você estiver usando o Maven e empacotando suas classs Java como JAR, certifique-se de que o JAR esteja atualizado. Ainda assumindo que o JAR está no seu caminho de class, é claro.

Eu resolvi adicionando o arquivo jar contendo as classs importadas em WEB-INF/Lib .

Você está tentando importar uma class substituída como eu estava?

Em caso afirmativo, sua class substituída está no pacote errado ou simplesmente inexistente.

Criar ou mover a class para o local correto (src / [package.package]. [Class]) poderia resolver seu problema.

Isso normalmente acontece ao misturar (na mesma página jsp) a importação jsp estática:

 < %@include file="... 

com importação jsp dinâmica:

  isto gera a Exceção: "Somente um tipo pode ser importado ..." 

Eu tive a mesma mensagem de erro e minha maneira de lidar com isso é a seguinte:

  1. Primeiro, verifique o diretório de arquivos em que o Tomcat está publicando seu aplicativo da Web, por exemplo, D: \ Java \ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps \ myDatatable \ WEB-INF \ classs, em que normalmente colocamos nossas aulas. Se este não é o lugar onde você coloca suas classs, então você tem que descobrir onde, por padrão, é clicando com o botão direito em seu nome raiz da aplicação web -> Caminho de Construção -> Configurar Banho de Construção …–> Em seguida, verifique a aba “Source” e descubra o valor do campo “Default output folder”. Este será o lugar onde o Tomcat colocou suas classs.
  2. Você veria que a class XYZ ainda não foi construída. Para construí-lo, você poderia ir ao Menu “Projeto” -> “Limpar …” -> Selecione seu aplicativo da web para limpar.
  3. Após a conclusão, tente reiniciar seu servidor tomcat e vá verificar o diretório do arquivo novamente. Sua turma deveria estar lá. Pelo menos funciona para mim. Espero que ajude.