Не вдається знайти @Nullable всередині javax.annotation. *


116

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

Відповіді:


146

Вам потрібно включити банку, в якій існує цей клас. Ви можете знайти її тут

Якщо ви використовуєте 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

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, версія = 3.0.0}] у org.gradle.api.internal.artifacts. dsl.dependitions.DefaultDependencyHandler_Decorated@7b35fdf2.
kamal

@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 - якась проблема затемнення cp. Так, нарешті, вона збирається після імпорту зовнішньої банки в затемнення
Sam-T

Оскільки баночка не потрібна під час виконання, використовуйте compileOnly group...замість простоcompile group...
Ренато

7

У випадку, якщо хтось має це під час спроби скласти проект для Android, існує альтернативна реалізація Nullable в android.support.annotation.Nullable. Тож подбайте про те, на який пакунок ви посилаєтесь у своїх import.


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.