1

我正在尝试@Column使用以下代码扫描我的实体类以获取 JPA 注释;

for (Method m : User.class.getMethods())
{
    if (m.isAnnotationPresent(javax.persistence.Column.class))
    {
        javax.persistence.Column column = m.getAnnotation(javax.persistence.Column.class);
        System.out.println(column.name());
    }
}

但我得到了例外。我可以确认我已将 javax-api jar 作为我的依赖项的一部分加载。有谁知道我做错了什么?

线程“主”java.lang.ClassFormatError 中的异常:java.lang.ClassLoader 的 java.lang.ClassLoader.defineClass1(Native Method) 的类文件 javax/persistence/CascadeType 中的非本机或抽象方法中的缺失代码属性。 defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader. java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java .net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:423) 在 sun.misc。Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class. java:2442) 在 java.lang.Class.getDeclaredMethods(Class.java:1808) 在 sun.reflect.annotation.AnnotationType$1.run(AnnotationType.java:104) 在 sun.reflect.annotation.AnnotationType$1.run(AnnotationType .java:101) 在 java.security.AccessController.doPrivileged(Native Method) 在 sun.reflect.annotation.AnnotationType.(AnnotationType.java:100) 在 sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:84)在 sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:221) 在 sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88) 在 sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70) 在 java.lang.reflect.Method.declaredAnnotations(Method.java:699) 在 java.lang.reflect.Method.getAnnotation(Method.java :685) 在 java.lang.reflect.AccessibleObject.isAnnotationPresent(AccessibleObject.java:189)

4

1 回答 1

2

您的 jar 不包含任何方法体,而仅包含 API 规范。这不适合与您的应用程序一起运行或部署。提取 jar 在反编译器中打开类,您将了解它为什么不运行。我不确定你从哪里得到 javax-api jar,但你肯定需要这个 jar 的原始完整版本。

于 2013-05-07T10:11:19.587 回答