【问题标题】:Netbeans deployment fails after class rename类重命名后 Netbeans 部署失败
【发布时间】:2011-08-23 08:59:38
【问题描述】:

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

一切正常,直到我注意到我的 bean 类名中有错字。它是 serviceBean,我将其重命名为 ServiceBean,首字母大写。我使用了 Netbeans 的安全重命名功能,文件名和类签名都按预期更改。

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

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

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。如何摆脱这个鬼?

【问题讨论】:

  • 尝试在您的 NB 项目的所有(配置)文件中搜索“serviceBean”(首字母小写)。一些 conf 文件可能包含这个旧名称。
  • Eclipse 在服务器上下文菜单中有一个 Clean 选项来解决这类问题。 Netbeans没有类似的东西吗?否则尝试手动删除 Glassfish 上的整个工作目录。我不会将此作为答案发布,因为我不详细了解 Netbeans 如何使用 Glassfish。
  • @BalusC 感谢 BalusC。 Netbeans 具有“清理和构建”功能,我也尝试过。我什至删除了整个项目文件夹并从头开始重新创建它(尽管具有相同的项目和上下文名称)。
  • @MockerTim 谢谢,我已经尝试过了,但没有成功。
  • 一年前我在做同样的事情时遇到了类似的问题。看来我不得不转储我的本地副本并检查项目。我认为 Net Beans 将其缓存在某个地方。

标签: java netbeans jsf-2 glassfish glassfish-3


【解决方案1】:

我能够复制这个问题的一个变体。我不得不clear the NetBeans compilation cache(这似乎在允许大小写的操作系统上存在问题......)

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

  1. 停止服务器

  2. 清理项目

  3. 停止 NetBeans

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

  5. 启动 NetBeans

当我运行有问题的项目时,NetBeans 重新编译了项目,启动了服务器并打开了 index.xhtml。之后,我能够成功浏览应用程序。

我已打开http://netbeans.org/bugzilla/show_bug.cgi?id=198565 来跟踪问题。请监控该问题并添加任何您认为有助于尝试解决该问题的人的信息。

【讨论】:

  • 成功了,非常感谢你的帮助,文斯!我会密切关注这个问题。
  • +1 天哪!在我遇到这个之前,我只花了 2 个多小时在谷歌上搜索、更改 faces-config、玩 POJO 本身! :-(
  • 与问题无关,但在 glassfish 上创建新域后,我遇到了类似的问题。在部署应用程序时,netbeans 仍在寻找旧域并给出类似于“部署错误错误目标服务器 ID ..”的错误。应用您提供的步骤后,错误已解决,感谢指导=)
【解决方案2】:

我在使用 NetBeans 7.3 时遇到了非常相似的问题,这意味着它仍未修复。它发生在我对实体类进行重命名和删除之后,JPA 拒绝相信该类已被删除,因此我无法部署到 Glassfish。

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

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

$ grep -r MyDeletedEntity *

而且繁荣,我删除的课程几乎没有引用!

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

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

【讨论】:

    【解决方案3】:

    为时已晚,但可能对其他人有所帮助。我刚刚意识到 JRebel 保留了对旧名称的引用。我为我的项目禁用了 JRebel,clean&build+run,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2023-01-30
      • 2015-01-22
      • 2014-06-07
      • 2016-08-22
      相关资源
      最近更新 更多