【问题标题】:Errai GWT Composite ClassNotFounException?Errai GWT Composite ClassNotFounException?
【发布时间】:2015-10-29 16:54:49
【问题描述】:

我已经从他们的网站上关注了最新的 Errai 入门指南。

当我使用 mvn clean gwt:run 时,基本上对于我创建的扩展 Composite 的每个 Java 类(即所有 Errai @Templated 控制器类)都会抛出类似于以下错误

[INFO] WARN  [org.jboss.modules] Failed to define class com.justinvesting.client.local.pages.NamePage in Module "deployment.errai-test.war:main" from Service Module
Loader: java.lang.LinkageError: Failed to link com/justinvesting/client/local/pages/NamePage (Module "deployment.errai-test.war:main" from Service Module Loader)
[INFO]  at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:487) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:408) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.as.weld.WeldModuleResourceLoader.classForName(WeldModuleResourceLoader.java:68) [wildfly-weld-8.1.0.Final.jar:8.1.0.Final]
[INFO]  at org.jboss.weld.bootstrap.BeanDeployer.loadClass(BeanDeployer.java:106) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:94) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:62) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:60) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53) [weld-core-impl-2.1.2.Final.jar:2014-01-09 09:23]
[INFO]  at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_60]
[INFO]  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60]
[INFO]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60]
[INFO]  at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
[INFO] Caused by: java.lang.NoClassDefFoundError: com/google/gwt/user/client/ui/Composite
[INFO]  at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_60]
[INFO]  at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_60]
[INFO]  at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules-1.3.3.Final.jar:1.3.3.Final]
[INFO]  ... 19 more
[INFO] Caused by: java.lang.ClassNotFoundException: com.google.gwt.user.client.ui.Composite from [Module "deployment.errai-test.war:main" from Service Module Loader

但是,这似乎并没有真正停止应用程序的编译和运行。完成后,我仍然可以成功访问我的 Errai GWT 应用程序。但是我创建的类越多,这个堆栈跟踪的时间就越长!

有什么想法吗?

【问题讨论】:

    标签: java maven gwt errai


    【解决方案1】:

    您的运行时类路径中应该有 gwt-server.jar。 Composite 类存在于 gwt-servlet.jar 中。

    【讨论】:

    • 你有关于 Errai 的更多信息吗?正如我上面提到的,应用程序仍然运行良好,并且 web 应用程序完全可用,它只是在 GWT 开发模式启动时记录这些错误。令人沮丧的是,我遵循了 Errai 入门指南,所以我不知道出了什么问题。同样,我已经克隆了几个 Errai 的演示项目,它们在运行时不会遇到这个问题,但我在任何地方的任何 pom 或配置文件中都看不到任何可能的差异! :(
    • 你能发布你的项目 pom 和 gwt xml 文件吗?
    • 在 ErraiTest 的 pom.xml 中,gwt-user 库添加了 'provided' 范围。这意味着这个库不会被打包到 WEB-INF/lib 中。这个库应该存在于外部的类路径中,或者您应该更改从您的 pom 中删除“提供”范围,以便它包含在 WEB-INF/lib 中。
    • 啊,太棒了,解决了这个问题!我会将此标记为正确答案,以便您获得荣誉。不幸的是,构建仍然抱怨缺少 HasModel,但它远没有为每个组件出现的 Component 烦人。
    【解决方案2】:

    此错误表示所需的 jar 在构建路径上,但在运行时不可用。在部署应用之前,请确保它包含在 WEB-INF/lib 文件夹中。

    【讨论】:

    • 我意识到这就是 classnotfoundexception 的含义,但是在 GWT 和 Errai 的上下文中,我到底错过了什么以及在哪里?正如我所提到的,该应用程序仍然可以在 GWT 的开发模式下正常运行,我可以完美地使用 webapp。这些编译时错误似乎没有任何区别......但是!
    • 还有另一种可能性——例如,你有这个类的两个副本,因为你有同一个 jar 的两个版本。检查您的 WEB-INF/lib 文件夹以确保您包含所有 jar,但每个 jar 仅包含一个副本。如果您使用 Eclipse,它实际上可以在问题选项卡中向您发出警告,指出资源在运行时不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多