java - 如何在 WAR 部署期间检查哪个类/jar 导致 "Cannot inherit from final class"?

标签 java deployment jar weblogic war

我正在将 WAR 文件部署到 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)

最佳答案

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

虽然 Weblogic 是专有的,但 Java 本身是开源的,因此您可能会尝试关注以 at java 开头的堆栈跟踪中的行。 但理论上 Java 调试器甚至应该能够调试关闭的代码-源代码,在某种程度上。

关于java - 如何在 WAR 部署期间检查哪个类/jar 导致 "Cannot inherit from final class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057877/

相关文章:

java - Java和数据库中的多线程

java - 为什么 setPreferedSize() 方法对 JPanel 不起作用?

Java JAR 库压缩

java - @OneToOne Hibernate 带注释。无法正确保存

java - 如何为我的 REST 应用程序配置 https?

ruby-on-rails - 如何在 Capistrano 部署期间上传文件到发布目录?

visual-studio-2008 - .NET CF 3.5 移动应用程序在 VS 2008 中构建缓慢

ruby - 在部署期间更改 Ruby 版本

java - 创建 .JAR 文件失败

java - 如何从另一个 jar 运行一个 jar 并在执行期间显示第一个可运行的控制台输出