Java 类重命名后Netbeans部署失败

Java 类重命名后Netbeans部署失败,java,netbeans,jsf-2,glassfish,glassfish-3,Java,Netbeans,Jsf 2,Glassfish,Glassfish 3,我正在为一个Web服务编写一个测试客户端。这是一个使用JSF框架的Netbeans 6.9.1 Web应用程序。我有一个调用webservice的托管bean 一切都很顺利,直到我注意到我的bean类名中有一个输入错误。它是serviceBean,我用大写字母将它重命名为serviceBean。我使用了Netbeans的安全重命名功能,文件名和类签名都按预期进行了更改 但从那时起,我在Glassfish 3.0.1上运行应用程序时遇到了很多麻烦 我可以从Netbeans构建我的应用程序而不会出错

我正在为一个Web服务编写一个测试客户端。这是一个使用JSF框架的Netbeans 6.9.1 Web应用程序。我有一个调用webservice的托管bean

一切都很顺利,直到我注意到我的bean类名中有一个输入错误。它是serviceBean,我用大写字母将它重命名为serviceBean。我使用了Netbeans的安全重命名功能,文件名和类签名都按预期进行了更改

但从那时起,我在Glassfish 3.0.1上运行应用程序时遇到了很多麻烦

我可以从Netbeans构建我的应用程序而不会出错(甚至“Clean&build”)。但如果部署,服务器日志中会显示以下消息:

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
我在facelet页面上有一个表单,它将提交给我的托管bean。尽管存在上述错误,表单仍将加载,但如果我尝试提交表单,则会出现以下错误:

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)
因此,这只是由上面的NoClassDefFoundError引起的后续错误

现在让我们来看看奇怪的部分: 如果我构建项目,它将创建文件ServiceBean.class,但如果我从Netbeans部署项目,然后查看部署目录,则该类将重命名为ServiceBean.class

部署过程似乎重命名了该文件

有什么问题?(Netbeans 6.9.1、Glassfish 3.0.1、Windows 7)


更新:它变得更好:将ServiceBean.java重命名为ServiceBean2.java。结果:如果我“清理并构建”,war文件仅包含ServiceBean2.class。如果我从NB部署,构建目录包含ServiceBean2.class和serviceBean.class。如何摆脱这个幽灵?

我能够复制这个问题的一个变体。我不得不这么做(似乎操作系统上存在一些问题,可以原谅案例…)

为了解决我遇到的问题,我必须:

  • 停止服务器

  • 清理项目

  • 停止NetBeans

  • 删除%HOME%.netbeans\6.9\var\cache

  • 启动NetBeans

  • 当我运行出现问题的项目时,NetBeans重新编译了该项目,启动了服务器并打开了index.xhtml。在那之后,我成功地浏览了这个应用程序


    我已经开始跟踪这个问题。请监视该问题,并添加您认为有助于试图解决该问题的人的任何信息。

    我在NetBeans 7.3中遇到了一个非常类似的问题,这意味着它仍然没有得到修复。它发生在我重命名并删除一个实体类之后,JPA拒绝相信该类已被删除,因此我无法部署到Glassfish

    从重新启动NetBeans和Glassfish到实际重新安装它们,我花了很多时间。事实证明,重新安装NetBeans并没有清除缓存,这就是问题所在

    在运行OS X时,我在~/Library/Caches/NetBeans中执行了以下操作:

    $grep-r我的删除身份*

    砰的一声,很少有人提到我被删除的类

    然后,我继续删除该文件夹中的内容,重新启动NetBeans,然后再次部署到Glassfish。现在它工作了

    如果这不起作用,也要调查
    /Applications/NetBeans/NetBeans{whateverversion}.app/Contents/Resources/NetBeans/nb/var/cache并删除该文件夹中的所有内容。

    太晚了,但可能会帮助其他人。我刚刚意识到JRebel一直在引用旧名字。我为我的项目禁用了JRebel,clean&build+run解决了问题。

    尝试根据NB项目的所有(配置)文件搜索“serviceBean”(首字母小写)。有些conf文件可能包含这个旧名称。Eclipse在服务器上下文菜单中有一个Clean选项,用于解决这类问题。Netbeans没有类似的功能吗?否则,尝试手动删除Glassfish上的整个工作目录。我不会把这篇文章作为回答,因为我不知道Netbeans如何使用Glassfish的细节。@BalusC谢谢BalusC。Netbeans具有“干净和构建”功能,我也尝试过。我甚至删除了整个项目文件夹,并从头开始重新创建了它(虽然使用了相同的项目和上下文名称)。@MockerTim谢谢,我已经尝试过了,但没有成功。大约一年前我做同样的事情时,也遇到了类似的问题。看来我不得不扔掉我的本地副本,重新检查项目。我想网豆在某个地方缓存了它。这很有效,非常感谢你的帮助,文斯!我会关注这个问题的!我只是花了两个多小时在谷歌上搜索、更改人脸配置、玩POJO本身,然后才发现这个问题!:-(与问题无关,但在glassfish上创建新域后,我遇到了类似的问题。部署应用程序时,netbeans仍在查找旧域,并给出类似于“部署错误错误错误目标服务器ID…”的错误。应用您提供的步骤后,错误得到解决,感谢指南=)