我在迁移到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
答案 0 :(得分:8)
在@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来说很好,因为范围内可用依赖项 编译也可用于Javac。但是,Eclipse有所区别 这些与注释处理jar的依赖关系。
所以,我假设您正在使用“手动方式”来配置 eclipse注释处理:将jar添加到 Java编译器&gt; 注释处理&gt;工厂路径。它目前只包含
androidannotations-2.7.jar
。要解决此问题,您应该添加两个AndroidAnnotations 依赖项:codemodel和androidannotations-api
以下是我们应该如何更新文档:( SOLUTION!)
- 右键单击您的项目,选择属性
- 转到 Java编译器&gt;注释处理并选择启用注释处理
- 转到 Java编译器&gt;注释处理&gt;工厂路径
- 点击添加变量,选择M2_REPO并点击扩展... ;然后,选择以下JAR:
com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar
- 点击添加变量,选择M2_REPO并点击扩展... ;然后,选择以下JAR:
com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar
- 点击添加变量,选择M2_REPO并点击扩展... ;然后,选择以下JAR:
com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar
- 确认工作区重建
- 完成!
醇>
来源:https://github.com/androidannotations/androidannotations/issues/379#issuecomment-10073205
答案 1 :(得分:2)
尝试重建项目 - mvn clean package
。如果您有不同的Maven配置文件,请不要忘记指定配置文件。