Импорт NotNull или Nullable и Android Studio не будут компилироваться
Когда я добавляю @NotNull или @Nullable аннотации к параметру Android Studio автоматически помогает мне с добавлением /lib/annotations.jar и импортированием
import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable;
Но после этого проект не будет компилироваться. Если я также удалю аннотации, но сохраняю инструкции импорта, проект по-прежнему не будет компилироваться. Но, если я удалю операторы импорта для NotNull и Nullable, компилируется проект!
Android Studio дает общую ошибку:
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.
Запуск gradlew compileDebug
из cmd дает небольшой намек:
: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
Итак, я проверил переменные окружения, и они установлены как:
JAVA_HOME=C:\Program Files (x86)\Java\jre7
JDK_HOME=C:\Program Files\Java\jdk1.7.0_21\
У кого-нибудь есть идея? (Я новичок в программировании java и android)
Ответы
Ответ 1
Я думаю, правильный способ - использовать оригинальную библиотеку JetBrains из репозитория MavenCentral в ваших зависимостях build.gradle(последняя версия в этом примере):
dependencies {
compile 'com.intellij:annotations:[email protected]'
...
}
Ответ 2
Вы также можете использовать собственные андроиды @NonNull
и @Nullable
:
-
Добавьте следующее в build.gradle:
dependencies {
...
// For @Nullable/@NonNull
compile 'com.android.support:support-annotations:+'
}
-
Перейдите в Файл/ Настройка → Настройки проекта → Инспекции и выполните поиск "nullable".
В константных условиях и исключениях и @NotNull/@Nullable problems нажмите Настроить аннотации и выберите аннотации Android.
Вы также можете проверить Рекомендовать @Nullable аннотации... в разделе Константные условия и исключения или, возможно, настроить другие параметры.
Ответ 3
Для использования андроида поддержки Android, например - @Nullable, @NonNull и т.д. В вашем проекте должна быть импортирована аннотационная библиотека поддержки Android. Просто добавьте эту строку к зависимостям в gradle файле
dependencies {
compile 'com.android.support:support-annotations:+'
}
И импортировать пакет в класс.
Для использования @Nullable аннотации:
import android.support.annotation.Nullable;
Для @NonNull
import android.support.annotation.NonNull;
Подробнее вы можете найти здесь разработчики Android
Ответ 4
В настоящий момент в API Android или в библиотеке поддержки нет аннотаций NonNull/Nullable. Вы также не можете использовать IntelliJ, поскольку они не находятся в пути к классу компиляции при построении с помощью Gradle.
Однако вы можете легко создать свой собственный. Это очень просто:
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({METHOD,PARAMETER,LOCAL_VARIABLE,FIELD})
public @interface NonNull {
}
После этого вы можете настроить IntelliJ (или Android Studio), чтобы распознать этот (и соответствующий @Nullable
) аннотацию по умолчанию, используемую для Null-проверок.
Чтобы сделать это, перейдите в настройки IntelliJ в Inpections
, а затем найдите запись @NotNull/@Nullable problems
в Probable Bugs
в дереве проверки.
Выберите элемент, а в правом нижнем углу появится кнопка "Настройка аннотаций". Это позволит вам настроить свои собственные аннотации, поскольку тот, который intelliJ будет использовать для этой проверки.
Ответ 5
В 2015 году вы бы использовали аннотации из пакета android.support.annotation. Я просто не уверен, когда они добавили их, так как в документах нет такого типичного предложения "Добавлено в API уровня X", и мне не хочется читать блоги и т.д.>]
import android.support.annotation.NonNull;
...
public void fooFighter(@NonNull Object honeyBunny){
...
}
Ответ 6
Самый простой способ добавить следующее в раздел зависимостей вашего файла build.gradle.
dependencies {
compile 'com.intellij:annotations:[email protected]'
... ...
}
EDIT: обновлено, чтобы использовать идею @RichieHH для использования репозитория maven, что, безусловно, способ сделать это.
Ответ 7
Лучший способ - использовать зависимость maven
-
задайте путь репозитория, добавив
repositories {
maven {
url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
}
}
-
добавить зависимость
dependencies {
compile 'org.jetbrains:annotations:7.0.2'
}
-
PROFIT!
Ответ 8
Я сталкиваюсь с этой проблемой для gradle-5.1.1 - Android Studio 3.4 и подобной ошибки - Компиляция не удалась; см. вывод ошибки компилятора для деталей. Не удалось выполнить задачу ': app: compileDebugJavaWithJavac'. и т.д. В этом случае я использую
implementation 'org.jetbrains:annotations:16.0.2'
Ответ 9
Для Maven добавить зависимость:
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>16.0.1</version>
</dependency>