importing NotNull or Nullable and Android Studio won't compile

JavaGradleAndroid Studio

Java Problem Overview


When I add @NotNull or @Nullable annotations to a parameter Android Studio automatically helps me with adding /lib/annotations.jar and importing

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

But after this, the project won't compile. If I also remove the annotations but keep the import statements the project still won't compile. But if I remove the import statements for NotNull and Nullable the project compiles fine!

Android Studio gives a generic error:

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.

Running gradlew compileDebug from cmd gives a slight hint:

: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

So I checked my environment variables and they are set as:

JAVA_HOME=C:\Program Files (x86)\Java\jre7
JDK_HOME=C:\Program Files\Java\jdk1.7.0_21\

Anyone got any idea for this? (I'm new to both java and android programming)

Java Solutions


Solution 1 - Java

I guess, the right way is using original JetBrains library from MavenCentral repository in your build.gradle dependencies (latest available version in this example):

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

Solution 2 - Java

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.

Solution 3 - Java

For using Android support anotation like - @Nullable, @NonNull etc.. In your project must be imported android support annotations library. Just add this line to dependensies in gradle file

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

And import package to class.
For using @Nullable annotation:

import android.support.annotation.Nullable;

For @NonNull

import android.support.annotation.NonNull;

More info you can find here Android developers

Solution 4 - Java

At the moment, there is no NonNull/Nullable annotations in the Android API or in the support library. You also cannot use the IntelliJ one since they are not on the compilation classpath when building with Gradle.

However, you can easily create your own. It's very simple:

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

Once this is down, you can configure IntelliJ (or Android Studio) to recognize this one (and the matching @Nullable) to be the default annotation used for Null-checks.

To do this, go in the IntelliJ preferences, under Inpections, and then find the @NotNull/@Nullable problems entry under Probable Bugs in the inspection tree.

Select the item, and in the bottom right you'll have a button to "Configure Annotations". This will allow you set your own annotations as the one intelliJ will use for this inspection.

Solution 5 - Java

In 2015, you would have used 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){
   ...
}

Solution 6 - Java

I am facing that problem for gradle-5.1.1 - Android Studio 3.4 and the error like that - Compilation failed; see the compiler error output for details. Execution failed for task ':app:compileDebugJavaWithJavac'. etc. In this case I use

implementation 'org.jetbrains:annotations:16.0.2'

and above all error will be clear.

Solution 7 - Java

Just import androidx.annotation.Nullable for that purpose

Solution 8 - Java

The best way is to use the maven dependency

  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!

Solution 9 - Java

For Maven add dependency:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMobergView Question on Stackoverflow
Solution 1 - JavaSerge PopulovView Answer on Stackoverflow
Solution 2 - JavasquirrelView Answer on Stackoverflow
Solution 3 - JavaRoman SmoliarView Answer on Stackoverflow
Solution 4 - JavaXavier DucrohetView Answer on Stackoverflow
Solution 5 - JavaAmio.ioView Answer on Stackoverflow
Solution 6 - JavaMahmudur RahmanView Answer on Stackoverflow
Solution 7 - JavaAzizjan Hamidovich AyupovView Answer on Stackoverflow
Solution 8 - JavacurioushikhovView Answer on Stackoverflow
Solution 9 - JavaDeadCoonView Answer on Stackoverflow