javax.annotation在哪里?

40

好的,这可能是一个新手问题(我更擅长 C++),但我在 Java 的框架森林中迷失了方向……

我正在尝试研究 Eclipse RCP 开发。为此,我正在按照这个著名的教程进行: http://www.vogella.com/tutorials/EclipseRCP/article.html

在第 15 步中,我需要添加以下依赖包以导入到我的 Bundle 中。 javax.annotation javax.injection

问题在于,我无法选择它们(它们不在选择列表中) 我只有 javax.el、javax.servlet.* 和 javax.xml.*。

在查看了 http://docs.oracle.com/javase/7/docs/api/overview-summary.html 之后,我得出结论,这应该是标准 Java 的一部分。

我错过了什么明显的错误吗?

6个回答

22

依赖项包括其版本:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

请参见:http://mvnrepository.com/artifact/javax.annotation/javax.annotation-api

或者查看更新的jakarta.annotation

<dependency>
   <groupId>jakarta.annotation</groupId>
   <artifactId>jakarta.annotation-api</artifactId>
   <version>1.3.5</version>
</dependency>

请参见:https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api

Java通用注解模块java.xml.ws.annotation在Java 9中已被弃用,并在Java 11中被删除。如果遇到问题,您可以尝试添加javax.annotation。

Java 8的Javadocs可以在此处找到:http://docs.oracle.com/javase/8/docs/api/javax/annotation/package-summary.html


我尝试从这里导入“guava”库:https://github.com/google/guava ,但是我一直收到有关缺少“javax.annotation*”的错误,即使我已将编译器设置为Java 8版本。为什么它仍然缺失?你能帮忙解决吗? - android developer

6

5

不确定这是否仍然相关,但对于Java 8,我必须添加以下两个Maven依赖项,才能使javax.annotation.concurrent.ThreadSafe正常工作:

    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>jsr305</artifactId>
        <version>3.0.0</version>
    </dependency> 

2

2

这个库包含Javax注释,目前是最新版本。

针对maven:

<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>

对于Gradle

compile('com.google.code.findbugs:jsr305:3.0.2')

enter image description here


1
如果你正在寻找可为空的注解,JSpecify 是现代化的选择。
他们有 @Nullable
static void print(@Nullable String x) {
  System.out.println(String.valueOf(x));
}

更有趣的是,他们有一个名为@NullMarked的东西,它表示整个事物都被检查了是否为空。如果没有@Nullable标记,那就可以确保没有出现null
@NullMarked
public class Strings {
  public static String nullToEmpty(@Nullable String x) {
    return (x == null) ? "" : x;
  }

  public static int spaceIndex(String x) {
    return x.indexOf(' ');
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接