web-dev-qa-db-fra.com

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 à importer

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

Mais après cela, le projet ne sera pas compilé. Si je supprime aussi les annotations mais conserve les instructions d'importation, le projet ne sera toujours pas compilé. Mais Si je supprime les instructions d'importation pour NotNull et Nullable, le projet compile fine !

Android Studio génère 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.

Fonctionnement 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 suit:

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 ça? (Je suis nouveau dans les deux Java et Android))

54
Moberg

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

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

Vous pouvez également utiliser les propres @NonNull & @Nullable D'Android:

  • Ajoutez les éléments suivants à build.gradle:

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.Android.support:support-annotations:+'
    }
    
  • Allez à Fichier/ParamètresParamètres du projetInspections et recherchez "nullable".

    Dans Conditions et exceptions constantes et @ NotNull/@ Problèmes nuls, cliquez sur Configurer les annotations et sélectionnez les annotations d'Android.

    Vous pouvez également vouloir vérifier Proposer des annotations @Nullable… sous Conditions et exceptions constantes, ou éventuellement modifier d'autres options.

42
squirrel

Pour utiliser Android, une annotation de support telle que - @Nullable, @NonNull, etc.) doit être importée dans votre projet Android, annotations de support. Juste ajoute cette ligne aux dépendants dans le fichier gradle

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

Et importez le package dans la classe.
Pour utiliser l'annotation @Nullable:

import Android.support.annotation.Nullable;

Pour @NonNull

import Android.support.annotation.NonNull;

Vous trouverez plus d'informations ici développeurs Android

11
Roman Smoliar

En 2015, vous auriez utilisé les annotations du package Android.support.annotation . Je ne suis tout simplement pas sûr de savoir quand ils les ont ajoutés comme dans docs il n'y a pas cette phrase typique "Ajouté au niveau X de l'API" et je n'ai pas envie de lire des blogs, etc.>]

import Android.support.annotation.NonNull;

...

public void fooFighter(@NonNull Object honeyBunny){
   ...
}
5
Amio.io

Pour le moment, il n'y a pas d'annotations Non Null/Nullable dans l'API Android ou dans la bibliothèque de support. Vous ne pouvez pas non plus utiliser celle d'IntelliJ car elles ne figurent pas dans le chemin de classe de compilation lors de la construction avec Gradle.

Cependant, vous pouvez facilement créer le vôtre. C'est très simple:

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

Une fois que cela est arrêté, vous pouvez configurer IntelliJ (ou Android Studio) pour qu'il reconnaisse celui-ci (et le @Nullable) pour être l'annotation par défaut utilisée pour les contrôles nuls.

Pour ce faire, allez dans les préférences IntelliJ, sous Inpections, puis recherchez le @NotNull/@Nullable problems entrée 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 utilisée par intelliJ pour cette inspection.

5
Xavier Ducrohet

Je suis confronté à ce problème pour gradle-5.1.1 - Android Studio 3.4 et l'erreur comme ça - La compilation a échoué; voir la sortie d'erreur du compilateur pour plus de détails. L'exécution a échoué pour la tâche ': app: compileDebugJavaWithJavac'. etc. Dans ce cas, j'utilise

implementation 'org.jetbrains:annotations:16.0.2'

et surtout, l'erreur sera claire.

2
Mahmudur Rahman

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

  1. définir 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
curioushikhov

Pour Maven, ajoutez une dépendance:

<dependency>
    <groupId>org.jetbrains</groupId>
    <artifactId>annotations</artifactId>
    <version>16.0.1</version>
</dependency> 
0
DeadCoon