web-dev-qa-db-ja.com

NotNullまたはNullableをインポートしてAndroid Studioはコンパイルしません

@NotNullまたは@Nullableアノテーションをパラメーターに追加すると、Android Studioが/lib/annotations.jarの追加とインポートを自動的に支援します

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

しかし、この後、プロジェクトはコンパイルされません。注釈も削除するが、インポートステートメントを保持すると、プロジェクトはコンパイルされません。 ただし NotNullおよびNullableのインポートステートメントを削除すると、プロジェクトはコンパイルされますfine

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プログラミング)の両方が初めてです。

54
Moberg

私の推測では、正しい方法はbuild.gradleの依存関係(この例では最新バージョン)でMavenCentralリポジトリの元のJetBrainsライブラリを使用することです。

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

Android独自の@NonNullおよび@Nullableを使用することもできます。

  • 次をbuild.gradleに追加します。

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.Android.support:support-annotations:+'
    }
    
  • ファイル/設定プロジェクト設定検査に移動し、「nullable」を検索します。

    一定の条件と例外および@ NotNull/@ Nullable問題で、アノテーションの設定をクリックし、Androidのアノテーションを選択します。

    また、一定の条件と例外の下で@ Nullableアノテーションの提案…を確認するか、他のオプションを調整することもできます。

42
squirrel

Android-@ Nullable、@ NonNullなどの注釈をサポートします。プロジェクトにインポートする必要がありますAndroidサポート注釈ライブラリ。ちょうどこの行をgradleファイルのdependensiesに追加します

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

そして、クラスにパッケージをインポートします。
@ Nullableアノテーションを使用する場合:

import Android.support.annotation.Nullable;

@NonNullの場合

import Android.support.annotation.NonNull;

詳細はこちら Android開発者

11
Roman Smoliar

2015年には、Android.support.annotationパッケージの注釈を使用していました。 docs のようにそれらを追加したかどうかはわかりませんが、「APIレベルXに追加された」という典型的な文はなく、ブログなどを読む気はありません>>

import Android.support.annotation.NonNull;

...

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

現時点では、Android APIまたはサポートライブラリにNonNull/Nullable注釈はありません。IntelliJを使用することはできません。Gradleでビルドする場合、コンパイルクラスパス上にないためです。

ただし、独自に簡単に作成できます。とても簡単です:

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

これがダウンしたら、IntelliJ(またはAndroid Studio))を設定して、この1つ(および一致する@Nullable)をNullチェックに使用されるデフォルトのアノテーションとして認識できます。

これを行うには、Inpectionsの下のIntelliJ設定に移動し、検査ツリーの@NotNull/@Nullable problemsの下でProbable Bugsエントリを見つけます。

アイテムを選択すると、右下に「注釈の設定」ボタンが表示されます。これにより、intelliJがこの検査に使用する独自の注釈を設定できます。

5
Xavier Ducrohet

gradle-5.1.1-Android Studio 3.4とそのようなエラー-コンパイルに失敗しました;詳細については、コンパイラエラーの出力を参照してください。タスク ':app:compileDebugJavaWithJavac'の実行に失敗しました。など。この場合、私は

implementation 'org.jetbrains:annotations:16.0.2'

そして何よりもエラーは明確になります。

2
Mahmudur Rahman

最良の方法は、Maven依存関係を使用することです

  1. を追加して、リポジトリパスを設定します

    repositories {
        maven {
            url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
        }
    }
    
  2. 依存関係を追加する

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

0
curioushikhov

Mavenの依存関係を追加するには:

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