- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在迁移到 Android Annotations v.2.7 后,我在 eclipse 中构建我的项目时遇到了问题,同时 maven build 没问题。这是来自 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 session 数据:
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
最佳答案
在 @pyricau 的帮助下我解决了问题。这是他对 issue tracker 的回应:
As far as I can see,
AbstractProcessor.getSupportedSourceVersion()
tries to read the@SupportedSourceVersion
annotation on the processor.From the stacktrace, we can deduce that the AnnotationParser is trying to read all the annotations on the processor class. And that one of these annotations has a class array parameter that contains classes that cannot be loaded.
The only annotation that has a class array in
AndroidAnnotationsProcessor
is@ SupportedAnnotationClasses
.From that we can deduce that the annotations supported by androidannotations are not present, which means they are not in the classpath of the eclipse compiler.
As you probably noted, we extracted the API jar as a separate Maven artifact, leading to a new maven configuration:
<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>Since you are telling me that is works fine with Maven, I assume you configured this right.
Previously, the androidannotations dependency contained the annotations. It doesn't contain them any more, they are now in the androidannotations-api jar.
This is fine for Maven, because dependencies available in scope compile are also available to Javac. However, Eclipse differentiate those dependencies with the annotation processing jars.
So, I assume that you're using the "manual way" to configure the eclipse annotation processing: adding jars to Java Compiler > Annotation Processing > Factory Path. And it currently only contains
androidannotations-2.7.jar
.To fix the problem, you should add the two AndroidAnnotations dependencies: codemodel and androidannotations-api
Here is how we should update the doc: (SOLUTION!)
- Right-click your project, choose Properties
- Go to Java Compiler > Annotation Processing and choose Enable annotation processing
- Go to Java Compiler > Annotation Processing > Factory Path
- Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR :
com/googlecode/androidannotations/androidannotations-api/2.7/androidannotations-api-2.7.jar
- Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR :
com/sun/codemodel/codemodel/2.4.1/codemodel-2.4.1.jar
- Click on Add Variable, select M2_REPO and click on Extend...; then, select the following JAR :
com/googlecode/androidannotations/androidannotations/2.7/androidannotations-2.7.jar
- Confirm the workspace rebuild
- Done!
来源:https://github.com/androidannotations/androidannotations/issues/379#issuecomment-10073205
关于android - 移动到 Android Annotations v.2.7 后的 java.lang.ArrayStoreException : sun. reflect.annotation.TypeNotPresentExceptionProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13233631/
为什么下面的代码会抛出ArrayStoreException? double[] a = {2.0,3.4,3.6,2.7,5.6}; int[] b = {2,3,4,5}; System.arra
当我使用 Junit 进行测试时,我似乎无法运行此测试。它仅在失败跟踪上显示错误和“java.lang.ArrayStoreException”。如果有人能解决我的问题,那将是一个很大的帮助。 Lin
下面是我的代码,用于将字符串转换为其等效的 ascii 字符串。该字符串将只包含数字 - 这就是为什么我为每个字符分配 2 个字节(因为 1 到 9 在 ascii 中分别是 49 到 58)但我收到
private static void genericArrayTest() { ArrayList[] exceptionListArray = new ArrayList[10];
我有一个奇怪的问题。我有三个类(class)。书籍(抽象)和两个子类(小说、非小说)。我创建了书籍引用数组。该数组可以包含两个子类的对象。我有以下 Fiction 类代码。 public class
我读过很多关于 ArrayStoreExceptions 的帖子,其中大部分都属于以下类别之一: 基本误解(将基类放入子类的数组声明中) 在从列表转换为数组时出现类似的错误 围绕数组与泛型的“协变”问
我正在尝试创建一个链表数组来处理散列值冲突。我有一个对象数组,我试图存储 linkedList 但它似乎不起作用。我做错了什么,或者我应该采取更有效的方法。 这是我在运行代码时遇到的错误。 Excep
考虑以下对 Java 的 ArrayList#toArray 方法的测试。请注意,我借用了这个有用的代码 answer . public class GenericTest { public
当我遇到这样的问题时,我正在处理继承。我的代码如下 public class Parent { public void methodParent() {
Object[] o = "a;b;c".split(";"); o[0] = 42; 抛出 java.lang.ArrayStoreException: java.lang.Integer 同时 S
为什么我会收到此异常? java.lang.ArrayStoreException: java.lang.Integer at MyLinkedList.toArray(MyLinkedList.ja
我确实有这样一段代码: List userIdentifiers = getUsersModule().getUsersIdentifiers(); if (userIdentifiers.isEmp
这是Core Java一书中的例子 两类员工和经理。经理扩展员工。下面的代码 Manager[] mans ={new Manager("Adam"),new Manager("Ben")};
我正在存储对 BiConsumers 的引用适应Consumer : public void setConsumer(BiConsumer consumer) { fieldConsumer
我正在尝试运行一个基本的 JUNG 图示例 - 我能够在独立的 java 程序中运行以下代码,但是当我将相同的代码放入使用 Maven 构建的服务器端 jar 中时,它失败了Visualization
我的理解是你会得到 ArrayStoreException当您尝试插入不兼容类型的对象时。 Object[] array = new String[1]; array[0] = 1; 有人可以举个例子
您好,当我尝试将实现接口(interface)的类存储到定义为接口(interface)数组的数组中时,我收到此 Java ArrayStoreException 异常。代码如下: private I
每当我尝试使用 JPA 2.0 和 Websphere 运行更新查询时,都会收到 java.lang.ArrayStoreException。我正在使用测试实用程序,并且成功更新了正确的行等等,没有事
我正在创建一个类,其中包含名为 array 的 Object[] 类型的实例变量。此类包含返回 T[] 的方法,其中 T 是泛型。该方法应将 array 的内容复制到要返回的数组中。相关代码如下所示:
我的问题是,为什么我在线程“main”java.lang.ArrayStoreException 中收到异常: at java.lang.System.arraycopy (native method
我是一名优秀的程序员,十分优秀!