#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, который должен решить эту проблему.