A implantação do NetBeans falha após a renomeação da class

Estou escrevendo um cliente de teste para um webservice. É um WebApplication do NetBeans 6.9.1 que usa o framework JSF. Eu tenho um bean gerenciado que chama o webservice.

Tudo funcionou bem até que eu notei um erro de digitação no nome da minha class de bean. Era serviceBean e eu renomei para ServiceBean com letra maiúscula. Usei a function de renomeação segura do Netbeans e o nome do arquivo e a assinatura da class foram alterados conforme o esperado.

Mas a partir daí eu tive muitos problemas para executar meu aplicativo no Glassfish 3.0.1.

Eu posso construir meu aplicativo do NetBeans sem erro (até mesmo “Clean & Build”). Mas, se eu implantar, há a seguinte mensagem no log do servidor:

WARNUNG: Error in annotation processing: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean) WARNUNG: WEB9052: Unable to load class jsf.ServiceBean, reason: java.lang.ClassNotFoundException: jsf.ServiceBean INFO: Mojarra 2.0.2 (FCS b10) für Kontext '/PidClient' wird initialisiert. SCHWERWIEGEND: Unable to load annotated class: jsf.serviceBean, reason: java.lang.NoClassDefFoundError: jsf/serviceBean (wrong name: jsf/ServiceBean) INFO: Loading application PidClient at /PidClient 

Eu tenho um formulário em uma página de facelet que será submetida ao meu bean gerenciado. O formulário será carregado apesar do erro acima, mas se eu tentar enviá-lo, recebo o seguinte erro:

 WARNUNG: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null javax.el.PropertyNotFoundException: /index.xhtml @19,94 value="#{serviceBean.fldLname}": Target Unreachable, identifier 'serviceBean' resolved to null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93) at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95) at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008) 

Portanto, isso será apenas um erro de acompanhamento causado pelo NoClassDefFoundError acima.

E agora para a parte estranha: Se eu construir meu projeto, ele cria o arquivo ServiceBean.class, mas se eu implantar o projeto do NetBeans e, em seguida, examinar meu diretório de implantação, a class será renomeada para serviceBean.class .

Parece que o processo de implantação renomeia o arquivo.

Qual é o problema? (Netbeans 6.9.1, Glassfish 3.0.1, Windows 7)

ATUALIZAÇÃO: Fica ainda melhor: Renomeado ServiceBean.java para ServiceBean2.java. Resultado: Se eu “Limpar & Construir” o arquivo war contiver somente ServiceBean2.class. Se eu implantar a partir do NB, o diretório de construção contém ServiceBean2.class e serviceBean.class. Como me livrar desse fantasma?

Consegui replicar uma variação deste problema. Eu tive que limpar o cache de compilation do NetBeans (que parece ter problemas em sistemas operacionais que são indulgentes …)

Para superar o problema que encontrei, tive que:

  1. Pare o servidor

  2. Limpar o projeto

  3. Pare o NetBeans

  4. Apagar% HOME% .netbeans \ 6.9 \ var \ cache

  5. Iniciar o NetBeans

Quando executei o projeto que estava com problemas, o NetBeans recompilou o projeto, iniciou o servidor e abriu o index.xhtml. Consegui navegar pelo aplicativo com sucesso depois disso.

Eu abri o http://netbeans.org/bugzilla/show_bug.cgi?id=198565 para acompanhar o problema. Por favor, monitore esse problema e adicione qualquer informação que possa ajudar alguém que tente resolver o problema.

Eu tive um problema muito parecido com o NetBeans 7.3, o que significa que ainda não está consertado. Aconteceu depois que fiz renomeação e exclusão de uma class de entidade, e a JPA se recusou a acreditar que a class foi excluída, então não consegui implantar na Glassfish.

Demorei muitas horas, indo do reinício do NetBeans e Glassfish para realmente reinstalá-las. Acontece que a reinstalação do NetBeans não limpa seu cache, e é aí que está o problema.

Enquanto executo o OS X, fiz o seguinte em ~ / Library / Caches / NetBeans:

$ grep -r MyDeletedEntity *

E boom, havia poucas referências à minha aula excluída!

Em seguida, continuei a excluir o conteúdo dessa pasta, reiniciei o NetBeans e implantei novamente no Glassfish. Agora funciona!

Se isso não funcionar, consulte também / Aplicativos / NetBeans / NetBeans {whateverversion} .app / Contents / Recursos / NetBeans / nb / var / cache e exclua tudo nessa pasta também.

Tarde demais, mas pode ajudar os outros. Eu acabei de perceber que JRebel estava mantendo referências aos antigos nomes. Eu desabilitei o JRebel para meu projeto, clean & build + run e o problema escapou.