Impossible de trouver @Nullable dans javax.annotation. *

116

Je veux utiliser l' @Nullable annotation pour éliminer NullPointerExceptions. J'ai trouvé quelques tutoriels sur le net, j'ai remarqué que cette annotation vient du paquet javax.annotation.Nullable; mais quand je l'importe, une erreur de compilation est générée: impossible de trouver le symbole

MrSmith42
la source

Réponses:

146

Vous devez inclure un fichier jar dans lequel cette classe existe. Vous pouvez le trouver ici

Si vous utilisez Maven, vous pouvez ajouter la déclaration de dépendance suivante:

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

et pour Gradle:

dependencies {
  testImplementation 'com.google.code.findbugs:jsr305:3.0.2'
}
david99world
la source
74
Pourquoi Google (en particulier son artefact findbugs) fournit-il des types qui appartiennent au javaxpackage? N'y a-t-il pas un artefact avec un javaxgroupId préfixé qui fournit ce type?
Andrew Swan
9
@AndrewSwan, il semble que l'auteur ait choisi le groupId de com.google.code.findbugsparce qu'il était hébergé sur la solution d'hébergement de code de Google
matt b
2
Google-findbugs est l'implémentation de référence du jsr305, donc ils sont en quelque sorte autorisés à utiliser le javax-packageName je suppose.
icyerasor
33

L'artefact a été déplacé de net.sourceforge.findbugsà

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.0</version>
</dependency>
Jan
la source
26

Si vous utilisez Gradle, vous pouvez inclure la dépendance comme ceci:

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.0'
}
mkobit
la source
1
J'ai essayé et j'ai eu l'erreur: Impossible de trouver la méthode compile () pour les arguments [{group = com.google.code.findbugs, name = jsr305, version = 3.0.0}] sur org.gradle.api.internal.artifacts. dsl.dependencies.DefaultDependencyHandler_Decorated@7b35fdf2.
kamal
@kamal avec l'exemple ci-dessus, cela suppose généralement que vous avez appliqué le 'java'(ou un autre) plugin qui a déjà créé la compileconfiguration .
mkobit
Impossible d'importer javax.annotation.Nullable; J'ai jsr250-api-1.0.jar dans mon chemin de classe. J'ai même essayé de mettre à jour maven pom <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.0</version> </dependency> Eclipse a donné des erreurs: Artefact manquantcom.google.code.findbugs:jsr305:jar:3.0.0 Failure to transfer com.google.code.findbugs:jsr305:jar:3.0.0
Sam-T
Cela a finalement fonctionné jsr305-3.0.1.jar - un problème de cp eclipse. Oui enfin, il se compile après l'importation de jar externe dans eclipse
Sam-T
Parce que le pot n'est pas nécessaire au moment de l'exécution, utilisez compileOnly group...au lieu de justecompile group...
Renato
7

Au cas où quelqu'un aurait cela en essayant de compiler un projet Android, il existe une implémentation alternative Nullable dans android.support.annotation.Nullable. Faites donc attention au package que vous avez référencé dans votre imports.

Janis Peisenieks
la source
4

Si quelqu'un a ce problème lors de la construction d'un projet Maven créé dans IntelliJ IDEA en externe, j'ai utilisé la dépendance suivante au lieu de la réponse:

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

Son utilisation permettra au projet de s'appuyer sur IntelliJ IDEA et de lui-même en utilisant Maven.

Vous pouvez le trouver ici .

crawton
la source
2
méfiez-vous qui ne org.jetbrains:annotations:15.0fournit @org.jetbrains.annotations.Nullablepas @javax.annotation.Generated. Cela pourrait être un problème si vous utilisez certains générateurs de code comme openapi-generator-maven-plugin.
danidemi le
3

vous pouvez ajouter la dernière version de ceci en ajoutant la ligne suivante dans votre gradle.build.

implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
Jay Dangar
la source
2

J'utilise Guava qui a une annotation incluse:

(Code Gradle)

compile 'com.google.guava:guava:23.4-jre'
John Tribe
la source
1

Dans le cas des projets Android, vous pouvez corriger cette erreur en modifiant le fichier gradle du projet / module (build.gradle) comme suit:

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

Pour plus d'informations, veuillez consulter ici .

KPandian
la source