Мы используем обработку аннотаций Eclipse с фреймворком генерации кода Velocity. Некоторое время после go мы обновили весь наш код и сборки для использования Java 11 - и не заметили, что генерация кода больше не работает. (нам не нужно какое-то время изменять какой-либо сгенерированный код.)
После обновления различных jar-файлов и перестройки плагина Eclipse он пытается вызвать наш процессор генерации кода, но он получает ошибку NoClassDefFound для класс DataModelClassWrapper
. Это должно быть легко решить, но jar с этим классом уже находится в пути к классам проекта и в аннотации Eclipse FactoryPath. Я подтвердил, что .class также находится в файле .jar. Также класс VelocityCodeGenProcessor
(откуда возникает ошибка) находится в той же банке и пакете, что и DataModelClassWrapper
.
Обратите внимание, что мы используем «плагин», извлекая из него .jar и добавляя это путь к классам нашего проекта и путь к фабрике аннотаций.
На этом этапе я подозреваю, что либо мне не хватает чего-то очевидного, либо я нашел какой-то неясный случай угловой проблемы. (скорее всего первое)
eclipse.buildId=4.16.0.I20200604-0540
java.version=11.0.7
java.vendor=AdoptOpenJDK
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product
org.eclipse.jdt.apt.pluggable.core
Error
Wed Jul 08 17:13:06 PDT 2020
Exception thrown by Java annotation processor com.metrixsoftware.build.annotationProcessor.velocityCodeGen.VelocityCodeGenProcessor@2ccc9525
java.lang.Exception: java.lang.NoClassDefFoundError: Could not initialize class com.metrixsoftware.build.annotationProcessor.velocityCodeGen.DataModelClassWrapper
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:172)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:124)
at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:171)
at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:138)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotationsInternal(Compiler.java:958)
at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:932)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:450)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:386)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214)
at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:345)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:275)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:198)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:832)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.metrixsoftware.build.annotationProcessor.velocityCodeGen.DataModelClassWrapper
at com.metrixsoftware.build.annotationProcessor.velocityCodeGen.DataModel.getWrapped(DataModel.java:35)
at com.metrixsoftware.build.annotationProcessor.velocityCodeGen.DataModel.doAnalysis(DataModel.java:90)
at com.metrixsoftware.build.annotationProcessor.velocityCodeGen.VelocityCodeGenProcessor.process(VelocityCodeGenProcessor.java:170)
at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:142)
... 25 more