InvokedynamicClassLoader导致war文件中的NoClassDefFoundError运行方法?

时间:2018-09-06 17:10:56

标签: java maven tomcat war tomcat8

我正在开发一个Java 8后端,该数据库提供了一个带有其依赖关系的rest api(第一个项目需要执行另一个项目-我们将其称为 Project B ),该文件位于war文件中部署在tomcat 8上。此项目B 使用可以在here上找到的invokedynamic程序包。

执行多个方法将引发NoClassDefFoundError。堆栈跟踪的摘录如下:

java.lang.NoClassDefFoundError: es/uniovi/reflection/invokedynamic/interfaces/Callable
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
    at es.uniovi.reflection.invokedynamic.codegen.InvokedynamicClassLoader.register(InvokedynamicClassLoader.java:36)
    at es.uniovi.reflection.invokedynamic.codegen.ClassGenerator.getInstance(ClassGenerator.java:107)
    at es.uniovi.reflection.invokedynamic.MemberBSClass.getInstance(MemberBSClass.java:83)
    at es.uniovi.reflection.invokedynamic.MemberBSClass.getCallable(MemberBSClass.java:44)
    at es.uniovi.reflection.invokedynamic.ProxyFactory.getInvokedynamicCallable(ProxyFactory.java:773)
    at es.uniovi.reflection.invokedynamic.ProxyFactory.generateInvokeDynamicCallable(ProxyFactory.java:91)

导致错误的类可以在here中找到。

重要的是要知道,另一个使用此 Project B 作为依赖项的项目也可以在本地运行而没有任何麻烦(不是Web应用程序,并且包含一个简单的main呼叫)。这就是为什么我认为部署或执行无法正常工作或错过了某些东西,但我无法弄清实际问题的原因。

我的战争文件包含“ missing”类:

WEB-INF/classes/es/uniovi/reflection/invokedynamic/interfaces/Callable.class

此文件的整体结构如下:

- error
    - some error files
- META-INF
    - MANIFEST.MF
- WEB-INF
    - classes
         - de. ... -> the backend project
         - es / uniovi ... -> dependency of Project B
         - net. ... -> the dependent project
    - lib
    - spring
    - web-dev.xml
    - web.xml

InvokedynamicClassLoader是否有可能导致问题,并且无法在tomcat中运行?该方法以这种方式调用:

Class<T> c = (Class<T>) InvokedynamicClassLoader.getClassLoader().register(className, code);

className输出类似

es/uniovi/reflection/invokedynamic/Callable1

由于我对Java很陌生,因此感谢您提出任何建议。

0 个答案:

没有答案
相关问题