Обработка аннотаций Eclipse не находит класс в пути к классам - PullRequest
0 голосов
/ 09 июля 2020

Мы используем обработку аннотаций 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

1 Ответ

0 голосов
/ 09 июля 2020

Не лучший ответ, но ответ. Очистил и перестроил СНОВА, и исключение изменилось. Обратите внимание, что конкретный класс c, о котором сообщается как Not Found, несколько раз менялся - без изменений кода. Теперь он жаловался на то, что другой класс (PropertiesUtil из log4j, который был в пути к классам) не был найден. Но на этот класс ссылался «DataModelClassWrapper», который ранее не мог найти. Проверил DataModelClassWrapper и обнаружил, что у него есть неиспользуемое поле, объявляющее log4j Logger, который никогда не использовался. Я удалил это. Затем, внезапно, все начало работать.

Я ДЕЙСТВИТЕЛЬНО НЕНАВИЖУ такого рода «исправления». На самом деле это не объясняет, что было не так или что было изменено, чтобы исправить это.

...