2012-11-05 14 views
4

我在移動到Android Annotations v.2.7之後在eclipse中構建我的項目時遇到問題,同時maven build沒問題。下面是從月食錯誤日誌堆棧跟蹤:java.lang.ArrayStoreException:sun.reflect.annotation.TypeNotPresentExceptionProxy在移動到Android Annotations v.2.7之後

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

看來你上了github project :)

你的答案我只是把這裏的鏈​​接其他開發。

+4

來吧,張貼不僅僅是原始鏈接更多信息,請 - 我們要避免的信息鏈接腐事件的損失。 – thegrinner

7

隨着@pyricau幫助我解決了問題。這裏是他的問題跟蹤響應:

據我所看到的,AbstractProcessor.getSupportedSourceVersion() 嘗試讀取的 處理器@SupportedSourceVersion註解。

從stacktrace中,我們可以推斷出AnnotationParser正在嘗試 來讀取處理器類上的所有註釋。和的 這些註解的一個具有包含不能被加載的類 一類陣列參數。

AndroidAnnotationsProcessor中有一個類數組的唯一註釋是@ SupportedAnnotationClasses

由此我們可以推斷出支持的註釋並不存在,這意味着它們不在eclipse編譯器的 類路徑中。

正如你可能注意到,我們提取的API罐子作爲一個單獨的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區分開來。

所以,我假設你正在使用的「手工方式」配置 日食註釋處理:將罐子Java編譯器> 註解處理>工廠路徑。而它目前只包含 androidannotations-2.7.jar

爲了解決這個問題,你應該將兩個AndroidAnnotations 依賴關係:

這裏codemodel和androidannotations-API是我們應該如何更新文檔:(!SOLUTION

  1. 右對齊單擊您的項目,選擇屬性
  2. 轉至Java編譯器>註釋處理並選擇啓用anno塔季翁處理
  3. 轉到Java編譯器>註釋處理>工廠路徑
  4. 點擊添加變量,選擇M2_REPO並點擊擴展...;然後選擇以下JAR:com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar
  5. 點擊添加變量,選擇M2_REPO並點擊延伸...;然後選擇以下JAR:com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar
  6. 單擊添加變量,選擇M2_REPO並單擊延伸...;然後選擇以下JAR:com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar
  7. 確認工作區重建
  8. 完成!

來源:https://github.com/pyricau