如何在WAR部署期间检查哪个类/ jar导致“无法继承最终类”?

时间:2014-01-11 02:34:48

标签: java deployment jar weblogic war

我正在将Windows文件部署到Windows 7上的Weblogic 12.1.2服务器上(也尝试过Mac OS X)。

我得到一个例外(见下文)。看起来其中一个类是指一些父类的旧版本/新版本,它来自一些重复的jar。

如何找到导致它的类或jar文件?我的WAR文件在WEB-INF / lib中有一堆Jars ...

<Error> <Console> <BEA-240003> <Administration Console encountered the following error: weblogic.application.ModuleException:
java.lang.VerifyError: Cannot inherit from final class
    at weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:114)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:100)
    at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:172)
    at weblogic.application.internal.flow.ModuleStateDriver$1.next(ModuleStateDriver.java:167)
    at weblogic.application.utils.StateMachineDriver$ParallelChange.run(StateMachineDriver.java:80)
    at weblogic.work.ContextWrap.run(ContextWrap.java:40)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:550)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
Caused by: java.lang.VerifyError: Cannot inherit from final class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:385)
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:344)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:302)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
    at com.oracle.injection.integration.BeanLoaderUtils.loadBeanClassesFromJar(BeanLoaderUtils.java:54)
    at com.oracle.injection.integration.BeanLoaderUtils.loadBeanClassesFromEmbeddedJar(BeanLoaderUtils.java:34)
    at com.oracle.injection.integration.CDIModuleExtension.loadBeanClassesFromEmbeddedJar(CDIModuleExtension.java:727)
    at com.oracle.injection.integration.CDIModuleExtension.makeInjectionArchivesForResourceType(CDIModuleExtension.java:526)
    at com.oracle.injection.integration.CDIModuleExtension.createLibInjectionArchives(CDIModuleExtension.java:486)
    at com.oracle.injection.integration.CDIModuleExtension.createWebModuleInjectionArchive(CDIModuleExtension.java:193)
    at com.oracle.injection.integration.CDIModuleExtension.createInjectionArchive(CDIModuleExtension.java:179)
    at com.oracle.injection.integration.CDIModuleExtension.postPrepare(CDIModuleExtension.java:85)
    at weblogic.application.internal.ExtensibleModuleWrapper$PrepareStateChange.next(ExtensibleModuleWrapper.java:297)
    at weblogic.application.internal.ExtensibleModuleWrapper$PrepareStateChange.next(ExtensibleModuleWrapper.java:285)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42)
    at weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:109)

2 个答案:

答案 0 :(得分:2)

使用调试器,并在抛出java.lang.VerifyError时设置断点。在堆栈跟踪的ClassLoader相关部分中,至少有一些方法应该有参数,允许您确定要加载哪个类(和失败)。

虽然Weblogic是专有的,但Java本身是开源的,所以你可能会尝试专注于从at java.开始的堆栈跟踪中的行但是理论上Java调试器甚至应该能够调试闭源代码,某种程度上。

答案 1 :(得分:1)

我有同样的问题。在加载com.google.common.base.CaseFormat。

期间发生此错误

解决方案是

1)将com.google.common。*添加到weblogic-application.xml中的prefer-application-packages块中。

2)还需要检查番石榴版。 Pre 18 Guava与JEE 6环境不兼容。在我的情况下,我将番石榴从15.0更新到18.0版本。