当前位置: 首页 > 知识库问答 >
问题:

Eclipse注释处理在类路径上找不到类

罗昕
2023-03-14

我们使用Eclipse注释处理和Velocity代码生成框架。不久前,我们更新了所有代码和构建以使用Java11,但没有注意到代码生成不再有效。(我们暂时不需要更改任何生成的代码。)

在更新了各种jars并重建了Eclipse插件之后,它试图调用我们的代码生成处理器--但是它得到了类DataModelClassWrapper的NoClassDefFinder错误。这应该很容易解决,但是带有该类的jar已经在项目类路径和Eclipse注释FactoryPath中。我已经验证了. class也在. jar文件中。此外,VelocityCodeGenProcator类(错误来自何处)与DataModelClassWrapper类位于相同的jar和包中。

请注意,我们通过从中提取. 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个答案

范侯林
2023-03-14

不是一个好答案,而是一个答案。再次清理和重建,异常发生了更改。请注意,报告为“未找到”的特定类发生了几次变化——没有代码更改。现在,它抱怨没有找到另一个类(来自log4j的PropertiesUtil,它位于类路径中)。但是这一个是从“DataModelClassWrapper”引用的,它以前找不到这个类。检查DataModelClassWrapper,发现它有一个未使用的字段,该字段声明了一个从未使用过的log4j记录器。所以我把它删掉了。然后,突然间,一切都开始起作用了。

我真的很讨厌这种“修理”。它并不能真正解释什么是错误的,或者是什么改变了它来修复它。

 类似资料:
  • 我试着完成在spring boot的自定义属性。 我试图通过IntelliJ IDEA 2016.3创建一个简单的项目: 使用spring boot初始值设定项创建了一个新的Gradle项目(我根本没有检查任何内容)。 创建了新类。 文档中说我应该在我的项目中添加以下内容: 之后,我尝试重新构建项目并在设置中启用注释处理器,但通知还没有消失。完成也不起作用(我创建了一个字符串)。

  • 问题内容: 我正在为Eclipse构建注释处理器插件,我想做的是在处理过程中检查项目文件夹中的几个文件。 我想知道如何从处理器中获取项目路径。我相信可以这样做,因为项目源路径已提供给处理器-但我找不到找到它的方法。 我尝试查看System.properties和processingEnv.getOptions(),但那里没有有用的信息。 最终,我也想在Netbeans上使用此注释处理器,因此,如果

  • 问题内容: 我不太确定是什么原因导致的,因为清单中正确列出了它: 我还添加了来构建路径,并将其移至的顶部,但是它仍然给我同样的错误。 编辑:我完全重建了该项目,并且无法重现该错误。不知道是什么原因造成的。 问题答案: 我的项目有同样的问题。这是由于我的项目与我在项目中添加的库项目之间的android支持库版本冲突而发生的。将相同版本的android支持库放入您的项目和包含的库项目中,并清理构建 …

  • 问题内容: 我目前正在一个项目中,我必须使用纯本地ndk。当我尝试从Irrlicht引擎源运行helloworld示例时,它起作用了。然后,按照该示例的相同格式尝试在我的项目中使用它。但是我得到了: 在运行我的项目时。 这是我的main.cpp文件: n Android.mk: 我在AndroidManifest.xml中给了Activity名称: 我在这里做什么错?如有必要,我将发布完整代码。

  • 我目前正在做一个项目,在这个项目中我必须使用纯原生的NDK。当我尝试从Irrlicht引擎源代码运行helloworld示例时,它起到了作用。然后我尝试在我的项目中使用它,遵循该示例的相同格式。但我得到: 在运行我的项目时。 并且我在AndroidManifest.xml中给出了活动名称: 我在这里犯了什么错误?如果需要,我会发布完整的代码。