74 votes

l'importation de NotNull ou Nullable et Android Studio ne compile pas

Quand j'ai ajouter @NotNull ou @Nullable annotations à un paramètre Android Studio m'aide avec l'ajout /lib/annotations.jar et l'importation de

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

Mais après cela, le projet ne compile pas. Si j'ai aussi supprimer les annotations, mais conserver les instructions d'importation le projet ne compile pas. Mais si je supprime les déclarations d'importation pour NotNull et Nullable le projet compile fine!

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.

L'exécution gradlew compileDebug de cmd qui donne un léger soupçon:

: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 ils sont définis comme:

JAVA_HOME=C:\Program Files (x86)\Java\jre7
JDK_HOME=C:\Program Files\Java\jdk1.7.0_21\

Quelqu'un a une idée pour cela? (Je suis nouveau sur java et android de programmation)

80voto

Serge Populov Points 391

Je suppose que, de la bonne façon est d'origine à l'aide de JetBrains bibliothèque de MavenCentral référentiel dans votre construction.gradle dépendances (dernière version disponible dans cet exemple):

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

50voto

squirrel Points 192

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

  • Ajoutez ce qui suit à construire.gradle:

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.android.support:support-annotations:+'
    }
    
  • Allez à Fichier / ConfigurationParamètres du ProjetInspections et de la recherche pour "nullable".

    Dans des conditions Constantes et exceptions et @NotNull/@Nullable problèmes, cliquez sur Configurer les annotations et sélectionner Android annotations.

    Vous pouvez également vouloir vérifier Suggèrent @Nullable annotations... sous des conditions Constantes et exceptions, ou éventuellement d'ajuster d'autres options.

6voto

Xavier Ducrohet Points 10342

Pour le moment, il n'est pas Non null/Nullable annotations dans les API Android ou dans la bibliothèque de prise en charge. Vous ne pouvez pas utiliser l'Ide, car ils ne sont pas sur la compilation classpath 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 en bas, vous pouvez configurer l'Ide (ou Android Studio) à le reconnaître (et la correspondance @Nullable) par défaut, l'annotation est utilisée pour les Nuls-chèques.

Pour ce faire, allez dans le IntelliJ préférences, sous Inpections, puis de trouver l' @NotNull/@Nullable problems entrée en vertu de l' Probable Bugs lors de l'inspection de l'arbre.

Sélectionnez l'élément, puis en bas à droite, vous aurez un bouton "Configurer les Annotations". Cela vous permettra de définir vos propres annotations que l'on intelliJ à utiliser pour cette inspection.

3voto

Ben Clayton Points 16793

Le moyen le plus facile d'ajouter les éléments suivants à la section des dépendances de votre build.gradle fichier.

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

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

0voto

curioushikhov Points 75

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. Le PROFIT!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X