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)
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'
...
}
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églage → les Paramètres de Projet → les 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.
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
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.
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.
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){
...
}
Le meilleur moyen est d'utiliser la dépendance maven
-
Définissez le chemin du référentiel en ajoutant
repositories { maven { url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases" } }
-
Ajouter la dépendance
dependencies { compile 'org.jetbrains:annotations:7.0.2' }
PROFIT!