Java 自定义注释不可见

Java custom annotation not visible

对于我的项目,我正在使用 jackson fasterXml 将 classes 转换为 json。 现在我必须在一处更改对象的转换方式,以便忽略 @JsonIgnore 并序列化 属性。

我发现我可以通过扩展 JacksonAnnotationIntrospector 和自定义注释来做到这一点。问题是自定义注释只有在与实现 class 相同的 package/project/osgi 包中定义时才可见,而我想在公开 json 的服务包中定义它转换。如果注释在实现包中,我无法在 JacksonAnnotationIntrospector 中引用它,我需要检查注释的名称。

我有两个相同的注释,唯一不同的是包:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationName {

}

当我在实现上设置两者时,我只看到在与实现 class 相同的 package/project/osgi 包中定义的注释。 对此有限制吗?或者有人知道可能是什么问题吗?

将您的自定义注释放在一个唯一的包中,最好使用您控制的反向域名。将其放入一个单独的 API 包中(至少目前如此)。

在您的用户代码中,将 API 包添加到 Maven 依赖项并使用新注释。 maven-bundle-plugin(或您使用的)应该在您的清单中创建一个 Import-Package 语句。这将确保可以在运行时连接注释。

在解析注释的代码中,确保使用用户包的类加载器。这个类加载器应该能够看到标准注释和自定义注释。