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

gpfsuwkq  于 2023-03-03  发布在  Android
关注(0)|答案(9)|浏览(289)

当我向参数添加@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编程都是新手)

of1yzvn4

of1yzvn41#

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

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

ktecyv1j2#

你也可以使用安卓自带的@NonNull@Nullable

  • 将以下内容添加到build.gradle
dependencies {
    ...
    // For @Nullable/@NonNull
    compile 'com.android.support:support-annotations:+'
}
  • 转到文件/设置项目设置检查并搜索“可空”。

常量条件和异常和**@NotNull/@Nullable problems中,单击配置注解并选择Android的注解。
您可能还想在
常量条件和异常**下 checkout 建议@可空注解...,或者调整其他选项。

esbemjvw

esbemjvw3#

用于使用Android支持标注,如- @Nullable、@NonNull等。在您的项目中必须导入Android支持标注库。只需将此行添加到Gradle文件中的dependensies
dependencies { compile 'com.android.support:support-annotations:+' }
将包导入类。
对于使用@Nullable注解:

import android.support.annotation.Nullable;

对于@非空

import android.support.annotation.NonNull;

更多信息,您可以在这里找到Android developers

mjqavswn

mjqavswn4#

目前,Android API或支持库中没有NonNull/Nullable注解。您也无法使用IntelliJ注解,因为在使用Gradle构建时,它们不在编译类路径中。
但是,您可以轻松地创建自己的,非常简单:

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

关闭后,您可以配置IntelliJ(或Android Studio)将此注解(以及匹配的@Nullable)识别为用于空值检查的默认注解。
为此,请进入IntelliJ首选项中的Inpections下,然后在检查树中的Probable Bugs下找到@NotNull/@Nullable problems条目。
选择条目,在右下角你会看到一个按钮“Configure Annotations”,这将允许你设置你自己的注解作为intelliJ将用于这个检查的注解。

hsgswve4

hsgswve45#

在2015年,你可能会使用android.support.annotation包中的注解。我只是不确定他们是什么时候添加的,因为在docs中没有“在API级别X中添加”这句典型的话,而且我也不想阅读博客等。〉]

import android.support.annotation.NonNull;

...

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

c7rzv4ha6#

我在gradle-5.1.1-Android Studio 3.4中遇到了这个问题,并且出现了类似的错误- * 编译失败;有关详细信息,请参阅编译器错误输出。任务':app:compileDebugJavaWithJavac'. * 等的执行失败。在本例中,我使用

implementation 'org.jetbrains:annotations:16.0.2'

并且最重要的是错误将被清除。

axkjgtzd

axkjgtzd7#

只需导入androidx.annotation.Nullable即可实现此目的

yeotifhr

yeotifhr8#

最好的方法是使用maven依赖项
1.设置存储库路径,方法是添加

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

1.添加依赖项

dependencies {
    compile 'org.jetbrains:annotations:7.0.2'
}

1.利润!

rjjhvcjd

rjjhvcjd9#

对于Maven,添加依赖项:

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

相关问题