Nie można znaleźć @Nullable w javax.annotation. *


116

Chcę użyć @Nullable adnotacji, aby wyeliminować NullPointerExceptions. Znalazłem w sieci kilka tutoriali, zauważyłem, że ta adnotacja pochodzi z pakietu javax.annotation.Nullable; ale podczas importu generowany jest błąd kompilacji: nie można znaleźć symbolu

Odpowiedzi:


146

Musisz dołączyć słoik, w którym istnieje ta klasa. Znajdziesz go tutaj

Jeśli używasz Maven, możesz dodać następującą deklarację zależności:

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

a dla Gradle:

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

74
Dlaczego Google (zwłaszcza jego artefakt findbugs) dostarcza typy należące do javaxpakietu? Czy nie ma artefaktu z javax-prefixed groupId, który zapewnia ten typ?
Andrew Swan

9
@AndrewSwan wygląda na to, że autor wybrał groupId ze com.google.code.findbugswzględu na to, że był on hostowany na rozwiązaniu hostingowym kodu Google
mat b

2
Google-findbugs to referencyjna implementacja jsr305, więc wydaje mi się, że mogą używać javax-packageName.
icyerasor

33

Artefakt został przeniesiony z net.sourceforge.findbugsdo

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

26

Jeśli używasz Gradle, możesz dołączyć taką zależność:

repositories {
    mavenCentral()
}

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

1
Próbowałem i otrzymałem błąd: nie można znaleźć metody compile () dla argumentów [{group = com.google.code.findbugs, name = jsr305, version = 3.0.0}] w org.gradle.api.internal.artifacts. dsl.dependencies.DefaultDependencyHandler_Decorated@7b35fdf2.
kamal

@kamal z powyższym przykładem, ogólnie zakłada się, że zastosowałeś 'java'(lub inną) wtyczkę, która już utworzyła compilekonfigurację .
mkobit

Nie można zaimportować javax.annotation.Nullable; W mojej ścieżce klas mam jsr250-api-1.0.jar. Próbowałem nawet zaktualizować maven pom <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.0</version> </dependency> Eclipse dał błędy: Missing artefactcom.google.code.findbugs:jsr305:jar:3.0.0 Failure to transfer com.google.code.findbugs:jsr305:jar:3.0.0
Sam-T

W końcu zadziałało jsr305-3.0.1.jar - jakiś problem z eclipse cp. Tak, w końcu kompiluje się po zaimportowaniu zewnętrznego pliku jar do zaćmienia
Sam-T

Ponieważ słoik nie jest potrzebny w czasie wykonywania, użyj compileOnly group...zamiast po prostucompile group...
Renato

7

W przypadku, gdy ktoś ma to podczas próby skompilowania projektu systemu Android, istnieje alternatywna implementacja Nullable w android.support.annotation.Nullable. Więc uważaj, do którego pakietu odwołujesz się w swoim importpliku s.


4

Jeśli ktoś ma ten problem podczas budowania projektu Maven utworzonego w IntelliJ IDEA zewnętrznie, zamiast odpowiedzi użyłem następującej zależności:

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

Użycie tego pozwoli projektowi na zbudowanie na IntelliJ IDEA i samemu przy użyciu Maven.

Znajdziesz go tutaj .


2
uważaj, że nie org.jetbrains:annotations:15.0zapewnia . Może to być problem, jeśli używasz niektórych generatorów kodu jako . @org.jetbrains.annotations.Nullable@javax.annotation.Generatedopenapi-generator-maven-plugin
danidemi

3

możesz dodać najnowszą wersję tego, dodając następujący wiersz w swoim gradle.build.

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

2

Używam guawy, która zawiera adnotację:

(Kod Gradle)

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

1

W przypadku projektów na Androida możesz naprawić ten błąd, zmieniając plik gradle projektu / modułu (build.gradle) w następujący sposób:

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

Więcej informacji można znaleźć tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.