імпарту NotNull або Nullable і Android Studio не будзе кампіляваць

Калі я дадаю @NotNull або @Nullable анатацый да параметры Android Studio аўтаматычна дапамагае мне з даданнем /lib/annotations.jar і імпарту

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

Але пасля гэтага, праект не будзе кампілявацца. Калі я выдаліць анатацыі, але захаваць аператары імпарту праект яшчэ не скомпилируется. <�Моцны> Але калі я выдалю аператары імпарту для NotNull і Nullable праекта кампілюе выдатна !

Android-студыя дае агульную памылку:

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 з ЦМД дае невялікі намёк:

: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, так і АНДРОІД праграмавання)

44
Я не знаёмы з Gradle, але вы, верагодна, варта дадаць залежнасць annotations.jar на build.gradle . Нешта накшталт залежнасцямі {кампіляваць файлы ( 'поўны/шлях/да/annotations.jar')}
дададзена аўтар Vladimir Mironov, крыніца
Вы можаце знайсці тлумачэнне такіх паводзін тут stackoverflow.com/questions/16622410/…
дададзена аўтар Vladimir Mironov, крыніца
Дзякуй, гэта выправілі праблему! Я думаў, што даданне залежнасці было тое, што АНДРОІД студыі зрабілі аўтаматычна, калі я першы напісаў @NotNull і хацеў, каб я нешта дадаць.
дададзена аўтар Moberg, крыніца
@vmironov калі дадаць гэта як адказ я магу прыняць яго.
дададзена аўтар Moberg, крыніца

7 адказы

Я думаю, правільна выкарыстоўвае арыгінальную JetBrains бібліятэку з MavenCentral сховішчы ў вашых залежнасці build.gradle (апошнюю даступную версію ў дадзеным прыкладзе):

dependencies {
    compile 'com.intellij:annotations:[email protected]'
    ...
}
53
дададзена
<�Код> рэалізацыя выкарыстоўваецца замест кампіляцыі у новых версіях
дададзена аўтар Diblo Dk, крыніца

You can also use android's own @NonNull & @Nullable:

  • Add the following to build.gradle:

    dependencies {
        ...
       //For @Nullable/@NonNull
        compile 'com.android.support:support-annotations:+'
    }
    
  • Go to File/SettingProject SettingsInspections and search for "nullable".

    In Constant conditions & exceptions and @NotNull/@Nullable problems, click Configure annotations and select Android's annotations.

    You may also want to check out Suggest @Nullable annotations… under Constant conditions & exceptions, or possibly tweak other options.

39
дададзена
Ваш адказ вырашыў маю праблему. Толькі адно: «Пазбягайце выкарыстанне + у нумары версіі» адлюстроўваецца папярэджанне ... я паставіў сваю версію, як гэта: кампіляваць «com.android.support:support-annotations:23.1.1»
дададзена аўтар Primoz990, крыніца

Для выкарыстання Android падтрымкі гэтай нататкі, як - @Nullable, @NonNull і т.да .. У вашым праекце павінны быць імпартаваны андроідам бібліятэка падтрымкі анатацый. Проста <�моцны> дадайце гэты радок у dependensies у файле Gradle

<�Код> залежнасці {     кампіляцыі «com.android.support:support-annotations:+» }

І <�моцны> імпарт пакет у класе. Для выкарыстання выявы @Nullable анатацыі:

import android.support.annotation.Nullable;

для @NonNull

import android.support.annotation.NonNull;

More info you can find here Android developers

8
дададзена

На дадзены момант няма ненулявога/обнулять анатацый ў Android API або ў бібліятэцы падтрымкі. Вы таксама не можаце выкарыстоўваць IntelliJ адзін, так як яны не знаходзяцца на шляху да класаў пры зборцы Gradle.

Тым не менш, вы можаце лёгка стварыць свой уласны. Гэта вельмі проста:

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

Пасля таго, як гэта ўніз, вы можаце наладзіць IntelliJ (або Android-студыя), каб прызнаць гэта адзін (і ўзгадненне @Nullable ), каб быць анатацыі па змаўчанні выкарыстоўваецца для нулявых праверак.

Каб зрабіць гэта, перайдзіце ў наладах IntelliJ, у раздзеле Inpections </кодзе>, а затым знайсці @ NotNull/@ обнулять праблемы запісы ў раздзеле верагоднасцю Bugs у агляд дрэва.

Выберыце элемент, а ў правым ніжнім куце вы будзеце мець кнопку «Настройка анатацыі». Гэта дазволіць вам усталяваць ўласныя анатацыі, як адзін IntelliJ будзе выкарыстоўваць для гэтай праверкі.

5
дададзена
upvote таму, што гэты савет не мае патрэбы ў якіх-небудзь дадатковых бібліятэк іншых
дададзена аўтар Dominik Obermaier, крыніца
Я памыліўся. Я буду рэдагаваць.
дададзена аўтар Xavier Ducrohet, крыніца
Як выкарыстоўваць Android анатацый? Вы маеце на ўвазе androidannotations.org ?
дададзена аўтар Moberg, крыніца
Я не бачу @NotNull анатацыі ў рамках наогул XAV ...
дададзена аўтар superjugy, крыніца

Nowadays you should use annotations from android.support.annotation package. I am just not sure when they added them as in the docs there isn't that typical sentence "Added in API level X" and I don't feel like reading blogs, etc. >]

import android.support.annotation.NonNull;

...

public void fooFighter(@NonNull Object honeyBunny){
   ...
}
3
дададзена

Самы просты спосаб дадаць наступны код у раздзеле залежнасцяў вашага файла build.gradle.

dependencies {
    compile 'com.intellij:annotations:[email protected]'
    ... ...
}

EDIT: абноўлены для выкарыстання @ ідэі RichieHH, каб выкарыстоўваць рэпазітар Maven, які, безумоўна, спосаб зрабіць гэта.

3
дададзена
Так, гэта, верагодна, лепш за ўсё
дададзена аўтар Ben Clayton, крыніца
Лягчэй і прыбіральнік дадаць залежнасць Maven я б падумаць, а затым няхай Gradle сыход тейк яго. напрыклад залежнасцяў {кампіляцыі 'com.intellij: анатацыі: + @ банка'}
дададзена аўтар RichieHH, крыніца

Лепшы спосаб складаецца ў выкарыстанні залежнасці Maven

  1. set the repository path, by adding

    repositories {
        maven {
            url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
        }
    }
    
  2. add the dependency

    dependencies {
        compile 'org.jetbrains:annotations:7.0.2'
    }
    
  3. PROFIT!

0
дададзена