Java 压制;未知枚举常量“;类保留批注中使用的枚举警告

Java 压制;未知枚举常量“;类保留批注中使用的枚举警告,java,annotations,javac,Java,Annotations,Javac,当我编译具有某种外部jar依赖关系的项目时,javac会产生以下警告: warning: unknown enum constant ReferenceCardinality.MANDATORY 这是因为外部jar依赖项在其参数中使用了带有枚举的类保留注释。大致如下: import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferenceCa

当我编译具有某种外部jar依赖关系的项目时,javac会产生以下警告:

warning: unknown enum constant ReferenceCardinality.MANDATORY
这是因为外部jar依赖项在其参数中使用了带有枚举的类保留注释。大致如下:

import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
public class ExternalJarClass {
    @Reference(cardinality = ReferenceCardinality.MANDATORY)
    public void someMethod(...) {}
}
我找到了两种方法来删除此警告:

  • 包括命令行选项
    -nowarn
    。但是,我不想在编译项目时禁用所有警告
  • 在类路径中包含注释库jar

  • 我可以接受选项2,但由于我的项目不需要注释库,我想知道是否有其他方法可以抑制此警告。

    “[…]但由于我的项目不需要注释库,我想知道是否有其他方法可以抑制此警告。”-您可能不使用它,但是依赖关系的实现可能会在内部使用它。这很可能就是为什么它被设置为
    RetentionPolicy.CLASS
    。安全的做法是在类路径中包含注释库。在我的情况下,我使用的是一个为非osgi应用程序构建的带有osgi注释的库。osgi注释仅用于生成外部jar本身的osgi特定meta-inf属性,但在其他方面不使用。我最好不要每次使用外部jar时都包含osgi依赖项。同样,在这种情况下,javac会生成一个无法找到枚举引用Cardinality的警告,但不会生成无法找到引用的警告。在我看来,javac要么为这两种类型生成警告,要么两者都不生成警告。无论如何你现在被它困住了。使用警告、包含库、使用
    -nowarn
    单独编译零件或重写代码:)