我在WildFly服务器中遇到了类加载问题。我已经在 WildFly 独立服务器中部署了我的 EAR 文件。并通过jboss-deployment-structure.xml
声明依赖关系。
除了这个类之外,一切似乎都工作正常:
Caused by: java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at javax.el.FactoryFinder.newInstance(FactoryFinder.java:88)
我试图通过将org.glassfish.javax.el
模块添加到jboss-deployment-structure.xml
来解决此问题:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.glassfish.javax.el" export= "TRUE"/>
<module name="xxxxxxxx" export= "TRUE"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
我还试图通过将其添加到配置文件中的global-modules
来解决。但我仍然遇到同样的错误。
<global-modules>
<module name="org.glassfish.javax.el" slot="main"/>
</global-modules>
我试图通过在记录器类别上启用 TRACE 来记录类加载org.jboss.classloader
但没有运气。
然后我启用了从JAVA_OPTS(-verbose:class
)到控制台的类加载,但是在日志中找到了这个类。事实上,我在日志的jboss-deployment-structure.xml
中没有找到很多罐子。
有人可以帮我解决这个问题吗?提前谢谢你!
你错过了 el-api 依赖项,你可以添加以下 jar
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
或
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
然后你遇到了 ClassNotFoundException:com.sun.el.ExpressionFactoryImpl,你错过了 el-impl jar
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>