Импорт 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>