导入NotNull或Nullable并且Android Studio将无法编译

时间:2013-05-22 11:46:28

标签: java gradle android-studio

当我将@NotNull或@Nullable注释添加到参数时,Android Studio会自动帮助我添加/lib/annotations.jar并导入

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

但在此之后,该项目将无法编译。如果我也删除注释但保留import语句,项目仍然无法编译。 如果删除NotNull和Nullable的import语句,项目会编译 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.

从cmd运行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和android编程的新手)

10 个答案:

答案 0 :(得分:57)

我想,正确的方法是在build.gradle依赖项中使用MavenCentral存储库中的原始JetBrains库(此示例中为最新可用版本):

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

答案 1 :(得分:39)

您也可以使用Android自己的@NonNull& @Nullable

  • 将以下内容添加到 build.gradle

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.android.support:support-annotations:+'
    }
    
  • 转到文件 / 设置项目设置检查并搜索“可空”

    恒定条件&例外 @NotNull / @Nullable问题,点击配置注释并选择Android的注释。

    您可能还想在常数条件&条件下查看建议@Nullable注释... 。例外,或者可能调整其他选项。

答案 2 :(得分:11)

对于使用Android支持的anotation,如@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 developers

答案 3 :(得分:5)

目前,Android API或支持库中没有NonNull / Nullable注释。您也不能使用IntelliJ,因为在使用Gradle构建时它们不在编译类路径中。

但是,您可以轻松创建自己的。这很简单:

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

一旦关闭,您可以配置IntelliJ(或Android Studio)来识别这个(以及匹配的@Nullable)作为用于空检查的默认注释。

要执行此操作,请转到Inpections下的IntelliJ首选项,然后在检查树中的@NotNull/@Nullable problems下找到Probable Bugs条目。

选择项目,在右下角,您将有一个“配置注释”按钮。这将允许您设置自己的注释,因为智能将用于此检查。

答案 4 :(得分:5)

2015年,您将使用 android.support.annotation 包中的注释。我只是不确定他们何时添加它们,如docs中没有那个典型的句子"在API级别X"中添加而且我不想阅读博客等等。>]

import android.support.annotation.NonNull;

...

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

答案 5 :(得分:3)

将以下内容添加到build.gradle文件的依赖项部分的最简单方法。

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

编辑:更新后使用@ RichieHH的想法来使用maven存储库,这绝对是这样做的方法。

答案 6 :(得分:2)

为此目的只需导入 androidx.annotation.Nullable

答案 7 :(得分:0)

最好的方法是使用maven依赖

  1. 通过添加

    设置存储库路径
    repositories {
        maven {
            url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
        }
    }
    
  2. 添加依赖项

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

答案 8 :(得分:0)

我遇到了 gradle-5.1.1 - Android Studio 3.4 的问题,并且类似的错误-编译失败;有关详细信息,请参见编译器错误输出。任务':app:compileDebugJavaWithJavac'的执行失败。等。在这种情况下,我使用

implementation 'org.jetbrains:annotations:16.0.2'

尤其是错误将被清除。

答案 9 :(得分:0)

对于Maven,添加依赖项:

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