调试这些问题的正确方法是什么?
在我的情况下,我的 Java EE Web 项目中的 LinkageError 遇到了很大的麻烦:
问题
我将 JSF API (jboss-jsf-api_2.2_spec-2.2.5.jar) 包含到我的 Wildfly 模块目录中,即它将由 Wildfly 类加载器加载。我有外部库,它们也依赖于 JSF 实现(例如 Primefaces 和 OmniFaces)。此外,为了让构建过程没有错误地运行,我必须将该库添加为单独的 EAR 库。
奇怪的方式是在添加一个实现带有 faces 事件参数的函数的 bean 时,例如
public void myValueChangeListener(ValueChangeEvent e) {
// do sth.
}
实现这些功能会导致......
10:22:18,571 WARN [org.jboss.modules] (MSC service thread 1-1) Failed to define class javax.faces.event.ValueChangeEvent in Module "javax.faces.api:main" from local module loader @468a169f (finder: local module finder @13d344e7 (roots: /home/user/app-server/wildfly8/modules,/home/user/app-server/wildfly8/modules/system/layers/base)): java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"
... 我的 SEVERE 的起点
10:22:18,578 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-1) Critical error during deployment: : java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"
(删除参数允许构建项目没有错误)
问题
如何应对此类问题?我需要有关加载类的顺序的概述。可能有一种方法可以显示整个类加载器树或任何可以执行相同操作的分析工具。