You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JBoss部署EAR内Vaadin应用出现ClassNotFoundException求助

问题

将Vaadin应用打包为WAR包并嵌入至EAR包中,部署在JBoss服务器上。访问该Vaadin应用时,页面加载过程中实例化Binder时抛出ClassNotFoundException,但所需类文件已存在于WAR包的WEB-INF/lib目录内。

异常日志

java.lang.TypeNotPresentException: Type com.vaadin.flow.component.Component not present
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[?:?]
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[?:?]
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[?:?]
    at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[?:?]
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[?:?]
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[?:?]
    at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[?:?]
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[?:?]
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[?:?]
    at sun.reflect.generics.repository.ConstructorRepository.computeParameterTypes(ConstructorRepository.java:111) ~[?:?]
    at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:87) ~[?:?]
    at java.lang.reflect.Executable.getGenericParameterTypes(Executable.java:279) ~[?:?]
    at java.lang.reflect.Method.getGenericParameterTypes(Method.java:330) ~[?:?]
    at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:391) ~[?:?]
    at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:118) ~[?:?]
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:74) ~[?:?]
    at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:58) ~[?:?]
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1047) ~[?:?]
    at java.beans.Introspector.getBeanInfo(Introspector.java:462) ~[?:?]
    at java.beans.Introspector.getBeanInfo(Introspector.java:205) ~[?:?]
    at com.vaadin.flow.internal.BeanUtil.getBeanPropertyDescriptors(BeanUtil.java:83) ~[flow-server-2.7.15.jar:2.7.15]
    at com.vaadin.flow.data.binder.BeanPropertySet.<init>(BeanPropertySet.java:323) ~[flow-data-2.7.15.jar:2.7.15]
    at com.vaadin.flow.data.binder.BeanPropertySet.lambda$get$2(BeanPropertySet.java:439) ~[flow-data-2.7.15.jar:2.7.15]
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) ~[?:?]
    at com.vaadin.flow.data.binder.BeanPropertySet.get(BeanPropertySet.java:438) ~[flow-data-2.7.15.jar:2.7.15]
    at com.vaadin.flow.data.binder.Binder.<init>(Binder.java:1547) ~[flow-data-2.7.15.jar:2.7.15]

Caused by: java.lang.ClassNotFoundException: com.vaadin.flow.component.Component from [Module "deployment.xyz.ear" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255) ~[?:?]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410) ~[?:?]
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) ~[?:?]
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) ~[?:?]
    at java.lang.Class.forName0(Native Method) ~[?:?]
    at java.lang.Class.forName(Class.java:398) ~[?:?]
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[?:?]
    ... 120 more
解决方案
  • 调整EAR类加载配置:JBoss默认的EAR类加载器无法直接访问WAR内部的依赖,需在application.xml中为WAR模块配置独立类加载器,避免委托给EAR类加载器。示例配置:
    <module>
        <web>
            <web-uri>your-app.war</web-uri>
            <context-root>/your-app</context-root>
        </web>
        <class-loader delegate="false"/>
    </module>
    
  • 修正依赖范围:检查WAR的pom.xml,确保Vaadin相关依赖(如flow-server、flow-data)的范围为compile,而非provided——provided会依赖容器提供该类,但JBoss不包含Vaadin类。
  • 清理JBoss缓存:删除JBoss的standalone/data/content和standalone/tmp目录下的缓存文件,避免旧类干扰,之后重新部署EAR包。
  • 验证EAR结构:确认WAR包位于EAR根目录,而非EAR的lib文件夹。若WAR被放入EAR/lib,会被EAR类加载器加载,导致依赖隔离问题。

内容的提问来源于stack exchange,提问作者Dinesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:18:38