Не удается найти @Nullable внутри javax.annotation. *


116

Я хочу использовать @Nullable аннотацию для устранения NullPointerExceptions. Я нашел несколько руководств в сети, я заметил, что эта аннотация взята из пакета javax.annotation.Nullable; но когда я импортирую его, возникает ошибка компиляции: не удается найти символ

Ответы:


146

Вам нужно включить jar, в котором существует этот класс. Вы можете найти его здесь

Если вы используете Maven, вы можете добавить следующее объявление зависимости:

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

и для Gradle:

dependencies {
  testImplementation 'com.google.code.findbugs:jsr305:3.0.2'
}

74
Почему Google (особенно его артефакт findbugs) предоставляет типы, принадлежащие javaxпакету? Нет ли артефакта с javax-префиксом groupId, который предоставляет этот тип?
Эндрю Свон,

9
@AndrewSwan, похоже, автор выбрал groupId, com.google.code.findbugsпотому что он размещался в решении для хостинга кода Google
Matt B

2
Google-findbugs - это эталонная реализация jsr305, поэтому им, как мне кажется, разрешено использовать javax-packageName.
icyerasor

33

Артефакт перемещен из net.sourceforge.findbugsв

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

26

Если вы используете Gradle, вы можете включить такую ​​зависимость:

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.0'
}

1
Я попробовал и получил ошибку: не удалось найти метод compile () для аргументов [{group = com.google.code.findbugs, name = jsr305, version = 3.0.0}] в org.gradle.api.internal.artifacts. dsl.dependencies.DefaultDependencyHandler_Decorated@7b35fdf2.
kamal 01

@kamal в приведенном выше примере обычно предполагается, что вы применили 'java'(или другой) плагин, который уже создал compileконфигурацию .
mkobit

Невозможно импортировать javax.annotation.Nullable; У меня в пути к классам есть jsr250-api-1.0.jar. Я даже пробовал обновить maven pom <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.0</version> </dependency> Eclipse выдавал ошибки: Отсутствующий артефактcom.google.code.findbugs:jsr305:jar:3.0.0 Failure to transfer com.google.code.findbugs:jsr305:jar:3.0.0
Sam-T

Наконец, он сработал jsr305-3.0.1.jar - некоторая проблема с eclipse cp. Да, наконец, он компилируется после импорта внешнего
Sam-T

Поскольку jar не нужен во время выполнения, используйте compileOnly group...вместо него простоcompile group...
Renato

7

Если у кого-то есть это при попытке скомпилировать проект Android, есть альтернативная реализация Nullable в android.support.annotation.Nullable. Так что позаботьтесь о том, какой пакет вы указали в своем importфайле s.


4

Если у кого-то есть эта проблема при создании проекта Maven, созданного в IntelliJ IDEA извне, я использовал следующую зависимость вместо ответа:

<dependency>
  <groupId>org.jetbrains</groupId>
  <artifactId>annotations</artifactId>
  <version>15.0</version>
</dependency>

Использование этого позволит проекту строиться на IntelliJ IDEA и сам по себе с использованием Maven.

Вы можете найти это здесь .


2
остерегайтесь того, что не org.jetbrains:annotations:15.0дает . Это может быть проблемой, если вы используете некоторые генераторы кода как . @org.jetbrains.annotations.Nullable@javax.annotation.Generatedopenapi-generator-maven-plugin
danidemi

3

вы можете добавить последнюю версию этого, добавив следующую строку в свой gradle.build.

implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'

2

Я использую Guava, в который включены аннотации:

(Код Gradle)

compile 'com.google.guava:guava:23.4-jre'

1

В случае проектов Android вы можете исправить эту ошибку, изменив файл gradle проекта / модуля (build.gradle) следующим образом:

dependencies { implementation 'com.android.support:support-annotations:24.2.0' }

Для получения дополнительной информации, пожалуйста, обратитесь сюда .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.