Java自定义注释不可见

Java自定义注释不可见,java,annotations,jackson,osgi,Java,Annotations,Jackson,Osgi,对于我的项目,我正在使用jackson fasterXml将类转换为json。 现在我必须在一个地方更改对象的转换方式,以便忽略@JsonIgnore并序列化属性 我发现我可以通过扩展JacksonAnnotationIntrospector和自定义注释来实现这一点。问题是,自定义注释只有在与实现类定义在同一个包/项目/osgi包中时才可见,而我想在公开json转换的服务包中定义它。如果注释在实现包中,我不能在JacksonAnnotationIntrospector中引用它,我需要检查注释的名

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

我发现我可以通过扩展JacksonAnnotationIntrospector和自定义注释来实现这一点。问题是,自定义注释只有在与实现类定义在同一个包/项目/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 {

}
当我在实现上设置这两个选项时,我只看到从与实现类相同的包/项目/osgi包中定义的注释。
这方面有限制吗?或者有人知道问题出在哪里吗?

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

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


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

Hmm我有两个相同的注释。。。为什么不首先使用唯一的名称呢?我在两个定义中的一个中添加了一个2,所以它们是唯一的。我认为JacksonAnnotationIntrospector中没有问题,因为无论我在哪里调试,我都可以从实现类包中找到注释,而从服务包中找不到注释。那么,您是否导入了其他注释?您是否尝试使用包括包在内的全名引用它?我找到了解决方案,我使用了导出的子包“annotations”(使用api.*),但我只使用maven bundle插件导入api。我试图将注释移动到api包,使其正常工作。@user1147747故事的寓意:不要将导入与
*
一起使用。始终导入完整的类名,并有一个完整的显式导入列表。最重要的部分是让maven bundle插件发挥其魔力。它通常计算进口量。所以最好保留默认值。