importer NotNull ou Nullable et Android Studio ne compilera pas

Lorsque j'ajoute des annotations @ NotNull ou @Nullable à un paramètre, Android Studio m'aide automatiquement à ajouter/lib / annotations.jar et importation

import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable;

Mais après cela, le projet ne sera pas compilé. Si je supprime également les annotations mais garde les instructions d'importation, le projet ne sera toujours pas compilé. , Mais, si je retire les déclarations d'importation pour NotNull et Nullable le projet compile beaux - !

Android Studio donne une erreur générique:

Gradle: 
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Bugtester:compileDebug'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

En cours D'exécution gradlew compileDebug de cmd donne un léger indice:

:Bugtester:compileDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Bugtester:compileDebug'.
> Cannot find System Java Compiler. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable to point to the according directory.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

J'ai donc vérifié mes variables d'environnement et elles sont définies comme:

JAVA_HOME=C:Program Files (x86)Javajre7
JDK_HOME=C:Program FilesJavajdk1.7.0_21

Quelqu'un a une idée de ça? (Je suis nouveau à la fois java et la programmation android)

44
demandé sur Moberg 2013-05-22 15:46:27

7 réponses

Je suppose que la bonne façon est d'utiliser la bibliothèque JetBrains originale du référentiel MavenCentral dans votre build.dépendances gradle (dernière version disponible dans cet exemple):

dependencies {
    compile 'com.intellij:annotations:+@jar'
    ...
}
53
répondu Serge Populov 2013-12-08 17:08:18

Vous pouvez également utiliser Android propre @NonNull & @Nullable:

  • Ajoutez ce qui suit à build.gradle :

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.android.support:support-annotations:+'
    }
    
  • Aller Fichier / Réglageles Paramètres de Projetles Inspections et de la recherche pour "nullable".

    Dans Constante des conditions et exceptions et @NotNull/@Nullable problèmes de, sur Configurer les annotations et sélectionnez Android annotations.

    Vous pouvez également consulter suggérer @ Annotations Nullable ... sous conditions constantes et exceptions , ou éventuellement modifier d'autres options.

39
répondu squirrel 2014-09-11 13:04:48

Pour utiliser Android support anotation comme- @ Nullable, @NonNull etc.. Dans votre projet doit être importé Android support annotations bibliothèque. Il suffit de ajouter cette ligne à dependensies dans le fichier gradle

dependencies { compile 'com.android.support:support-annotations:+' }

Et importent le paquet dans la classe.
pour utiliser l'annotation @ Nullable:

import android.support.annotation.Nullable;

Pour @NonNull

import android.support.annotation.NonNull;

Plus d'infos vous pouvez trouver ici développeurs Android

8
répondu RomanSmolyar 2016-10-07 16:49:12

Pour le moment, il n'y a pas d'annotations NonNull/Nullable dans L'API Android ou dans la bibliothèque de support. Vous ne pouvez pas non plus utiliser IntelliJ car ils ne sont pas sur le classpath de compilation lors de la construction avec Gradle.

Cependant, vous pouvez facilement créer votre propre. C'est très simple:

@Documented
@Retention(RetentionPolicy.CLASS)
@Target({METHOD,PARAMETER,LOCAL_VARIABLE,FIELD})
public @interface NonNull {
}

Une fois que cela est désactivé, vous pouvez configurer IntelliJ (ou Android Studio) pour reconnaître celui-ci (et la correspondance @Nullable) comme l'annotation par défaut utilisée pour les vérifications Null.

Pour ce faire, allez dans les préférences IntelliJ, sous Inpections, puis recherchez l'Entrée @NotNull/@Nullable problems sous Probable Bugs dans l'arborescence d'inspection.

Sélectionnez l'élément, et en bas à droite, vous aurez un bouton pour "configurer les Annotations". Cela vous permettra de définir vos propres annotations comme celle qu'intelliJ utilisera pour cette inspection.

5
répondu Xavier Ducrohet 2013-11-26 22:02:34

Le moyen le plus simple d'ajouter ce qui suit à la section dépendances de votre build.fichier gradle.

dependencies {
    compile 'com.intellij:annotations:+@jar'
    ... ...
}

EDIT: mis à jour pour utiliser l'idée de @RichieHH d'utiliser le référentiel maven, ce qui est certainement la façon de le faire.

3
répondu Ben Clayton 2014-06-10 15:40:41

De nos jours, vous devriez utiliser des annotations de android.soutien.annotation paquet. Je ne suis pas sûr quand ils les ont ajoutés comme dans les docs il n'y a pas cette phrase typique "ajoutée au niveau API X" et je n'ai pas envie de lire des blogs,etc. >]

import android.support.annotation.NonNull;

...

public void fooFighter(@NonNull Object honeyBunny){
   ...
}
3
répondu zatziky 2015-05-16 07:54:49

Le meilleur moyen est d'utiliser la dépendance maven

  1. Définissez le chemin du référentiel en ajoutant

    repositories {
        maven {
            url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
        }
    }
    
  2. Ajouter la dépendance

    dependencies {
        compile 'org.jetbrains:annotations:7.0.2'
    }
    
  3. PROFIT!

0
répondu curioushikhov 2014-06-05 14:56:10