Класс не найден при создании источников графического интерфейса java.lang.NoClassDefFoundError: com/sun/xml/привязка/v2/модель/аннотации/Читатель аннотаций [Кодовое имя]

#java #eclipse #macos #codenameone

Вопрос:

Я использую eclipse 2021-3 ( подробная версия ниже), и после обновления моей формы в GUIBuilder я заметил, что java-метод initguibuilder components в классе формы был пуст, но в файле .gui были объявлены компоненты.

Трассировка стека, которую я получил после сохранения изменений в GUIBuilder, выглядит так:

 enGuiSrc:
[generateGuiSources] Generating GUI sources
[generateGuiSources] timeStr=1.0.0-1621275794779-1621275373210, lastTime=1.0.0-1621275794779-1621275373210
[generateGuiSources] Summary.java unmodified, skipping
[generateGuiSources] timeStr=1.0.0-1622573752664-1622594808739, lastTime=1.0.0-1622573752664-1622594776479
[generateGuiSources] Processing GUI builder file: /Users/jahrvis/eclipse-workspace-mobile/BabyTracker/src/com/jahrvis/mobile/babytracker/forms/CalendarForm.java
[generateGuiSources] Attempting to generate GUI sources for /Users/jahrvis/eclipse-workspace-mobile/BabyTracker/res/guibuilder/com/jahrvis/mobile/babytracker/forms/CalendarForm.gui with System JAXB
[generateGuiSources] Failed to generate Gui Source with System JAXB.  Will attempt using bundled JAXB.

BUILD FAILED
/Users/jahrvis/eclipse-workspace-mobile/BabyTracker/build.xml:49: java.lang.RuntimeException: java.lang.NoClassDefFoundError: com/sun/xml/bind/v2/model/annotation/AnnotationReader
    at com.codename1.build.client.GenerateGuiSources.generateGuiSource(GenerateGuiSources.java:294)
    at com.codename1.build.client.GenerateGuiSources.generateGuiSource(GenerateGuiSources.java:246)
    at com.codename1.build.client.GenerateGuiSources.execute(GenerateGuiSources.java:216)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
    at org.apache.tools.ant.Task.perform(Task.java:350)
    at org.apache.tools.ant.Target.execute(Target.java:449)
    at org.apache.tools.ant.Target.performTasks(Target.java:470)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.eclipse.ant.internal.core.ant.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:34)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
    at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:712)
    at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:532)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.eclipse.ant.core.AntRunner.run(AntRunner.java:374)
    at org.eclipse.ant.core.AntRunner.run(AntRunner.java:476)
    at codenameoneplugin.EclipseGUIBuilderConnector$2.run(EclipseGUIBuilderConnector.java:142)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.NoClassDefFoundError: com/sun/xml/bind/v2/model/annotation/AnnotationReader
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1153)
    at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1321)
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1373)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1338)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1093)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3325)
    at java.base/java.lang.Class.getMethodsRecursive(Class.java:3466)
    at java.base/java.lang.Class.getMethod0(Class.java:3452)
    at java.base/java.lang.Class.getMethod(Class.java:2199)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:258)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:250)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:447)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:652)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:599)
    at com.codename1.build.client.GenerateGuiSources.generateGuiSource_(GenerateGuiSources.java:301)
    at com.codename1.build.client.GenerateGuiSources.access$000(GenerateGuiSources.java:32)
    at com.codename1.build.client.GenerateGuiSources$1.run(GenerateGuiSources.java:272)
    ... 1 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.model.annotation.AnnotationReader
    at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1383)
    at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1338)
    at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1093)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 22 more

Total time: 0 seconds

Version: 2021-03 (4.19.0)
Build id: 20210312-0638 
 

Есть какие-нибудь подсказки, не связано ли это с проблемой фреймворка с новым eclipse?

Ответ №1:

Это связано с JDK. Первоначально код был написан для JDK 8, но позже jaxb был удален, и для JDK 11 мы пытаемся динамически загружать его, что не всегда хорошо работает.

Я думаю, что лучшим обходным путем был бы переход на Maven, который должен решить проблему.

В качестве альтернативы попробуйте убедиться, что вы работаете с JDK 8, который должен решить эту проблему.