Метод запуска NoClassDefFoundError в файле war, вызванный InvokedynamicClassLoader? - PullRequest
0 голосов
/ 06 сентября 2018

Я работаю над java 8 backend, предоставляя API остальных, построенный с его зависимостью (еще один проект, необходимый для выполнения первых проектов - давайте назовем его Project B ) в файле войны, который развернут на tomcat 8. Этот Project B использует пакет 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)

Класс, вызывающий ошибку, можно найти здесь .

Важно знать , что другой проект, использующий этот Проект B также в качестве зависимости, выполняется локально без каких-либо проблем (не веб-приложение и содержит простой основной вызов) , Вот почему я думаю, что развертывание или выполнение не работает должным образом или что-то пропустили, но я не мог понять реальную проблему.

Мой файл войны содержит «отсутствующий» класс:

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 вызывает проблему и не является исполняемым файлом, работающим внутри кота? Метод вызывается так:

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

где className выводит что-то вроде

es/uniovi/reflection/invokedynamic/Callable1

Спасибо за любые предложения из-за того, что я довольно новичок в Java.

...