【问题标题】:java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy after moving to Android Annotations v.2.7java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 移动到 Android Annotations v.2.7 后
【发布时间】:2012-10-25 09:05:26
【问题描述】:

在迁移到 Android Annotations v.2.7 后,我在 eclipse 中构建项目时遇到问题,同时 maven 构建还可以。这是来自 eclipse 错误日志的堆栈跟踪:

Error
Mon Nov 05 15:49:49 GMT+02:00 2012
Errors running builder 'Java Builder' on project 'heroes'.

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070)
    at java.lang.Class.getAnnotation(Class.java:3029)
    at javax.annotation.processing.AbstractProcessor.getSupportedSourceVersion(AbstractProcessor.java:103)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.ProcessorInfo.<init>(ProcessorInfo.java:56)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.discoverNextProcessor(IdeAnnotationProcessorManager.java:94)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:116)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:134)
    at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:820)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:365)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:178)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:302)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:60)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:254)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:178)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

Eclipse 会话数据:

eclipse.buildId=M20120914-1800
java.version=1.6.0_35
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product -product org.eclipse.epp.package.jee.product -keyring /Users/vitaliyzasadnyy/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -data /Users/vitaliyzasadnyy/Development/workspaces/native-container-android -product org.eclipse.epp.package.jee.product -keyring /Users/vitaliyzasadnyy/.eclipse_keyring -showlocation

【问题讨论】:

  • 看来你在github project 上得到了答案:) 我只是把链接放在这里供其他开发者使用。

标签: android android-annotations


【解决方案1】:

@pyricau 的帮助下,我解决了问题。这是他来自issue tracker的回复:

据我所知,AbstractProcessor.getSupportedSourceVersion() 尝试读取@SupportedSourceVersion 上的注释 处理器。

从堆栈跟踪中,我们可以推断出 AnnotationParser 正在尝试 阅读处理器类上的所有注释。而那一个 这些注释有一个包含类的类数组参数 无法加载。

唯一具有类数组的注解 AndroidAnnotationsProcessor@ SupportedAnnotationClasses

由此我们可以推断出支持的注解 androidannotations 不存在,这意味着它们不在 eclipse 编译器的类路径。

您可能已经注意到,我们将 API jar 提取为单独的 Maven 工件,导致新的 Maven 配置:

<dependencies>
        <!-- [...] -->
    <dependency>
        <groupId>com.googlecode.androidannotations</groupId>
        <artifactId>androidannotations</artifactId>
        <version>2.7</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.googlecode.androidannotations</groupId>
        <artifactId>androidannotations-api</artifactId>
        <version>2.7</version>
    </dependency>
</dependencies>

既然你告诉我这适用于 Maven,我假设你 配置了这个权限。

以前,androidannotations 依赖项包含 注释。它不再包含它们,它们现在在 androidannotations-api jar。

这对 Maven 来说很好,因为依赖项在范围内可用 compile 也可用于 Javac。但是,Eclipse 区分 那些与注解处理 jars 的依赖关系。

所以,我假设您使用“手动方式”来配置 eclipse注解处理:添加jar到Java Compiler > 注释处理 > 工厂路径。它目前只包含 androidannotations-2.7.jar.

要解决这个问题,你应该添加两个 AndroidAnnotations 依赖:codemodel 和 androidannotations-api

以下是我们应该如何更新文档:(SOLUTION!)

  1. 右键单击您的项目,选择属性
  2. 转到 Java 编译器 > 注释处理 并选择启用注释处理
  3. 转到 Java 编译器 > 注释处理 > 工厂路径
  4. 点击Add Variable,选择M2_REPO并点击Extend...;然后,选择以下 JAR:com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar
  5. 点击Add Variable,选择M2_REPO并点击Extend...;然后,选择以下 JAR:com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar
  6. 点击Add Variable,选择M2_REPO并点击Extend...;然后,选择以下 JAR:com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar
  7. 确认工作区重建
  8. 完成!

来源:https://github.com/androidannotations/androidannotations/issues/379#issuecomment-10073205

【讨论】:

    【解决方案2】:

    尝试重建项目 - mvn clean package。如果您有不同的 Maven 配置文件,请不要忘记指定配置文件。

    【讨论】:

    • 重建引用项目即可解决问题!
    猜你喜欢
    • 2012-08-03
    • 2021-05-23
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2020-10-28
    • 2018-02-14
    相关资源
    最近更新 更多