2013-05-22 36 views
43

當我添加@NotNull或@Nullable註釋參數的Android Studio會自動幫助我增加/lib/annotations.jar和進口進口NOTNULL或可空和Android Studio將無法編譯

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

但經過這個項目不會編譯。如果我也刪除註釋,但保留導入語句,項目仍然不會編譯。 但是如果我刪除了NotNull和Nullable的導入語句,項目編譯罰款

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編程的新手)

+2

我不熟悉gradle這個,但你應該添加依賴在'annotations.jar'到'build.gradle'上。像'依賴關係{編譯文件('full/path/to/annotations.jar')}' –

+0

謝謝,這解決了這個問題!我認爲添加依賴項是android studio在第一次寫入@NotNull時自動執行的操作,它希望我添加一些東西。 – Moberg

+1

你可以在這裏找到這個行爲的解釋http:// stackoverflow。com/questions/16622410/how-do-i-add-a-library-project-to-the-android-studio-and-use-itsome-asked-dont/16683375#16683375 –

回答

49

我想,在你的build.gradle依賴正確的方法是使用從MavenCentral庫原JetBrains公司庫(在這個例子中最新版本):

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

目前,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條目。

選擇該項目,在右下角您將有一個按鈕來「配置註釋」。這將允許您設置自己的註釋,因爲一個intelliJ將用於此檢查。

+1

如何使用Android註釋?你的意思是http://androidannotations.org/? – Moberg

+0

我沒有在框架中看到@NotNull註釋在所有Xav ... – superjugy

+0

我錯了。我會編輯這個。 –

3

將以下內容添加到build.gradle文件的依賴項部分的最簡單方法。

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

編輯:更新爲使用@ RichieHH的想法使用maven倉庫,這絕對是做到這一點的方式。

+2

更簡單和更清晰的是添加我認爲的maven依賴,然後讓gradle來照顧它。例如依賴關係編譯'com.intellij:註釋:+ @ jar' } – RichieHH

+0

是的,那可能是最好的 –

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. 利潤!

37

您還可以使用Android的自身@NonNull & @Nullable

  • 以下添加到的build.gradle

    dependencies { 
        ... 
        // For @Nullable/@NonNull 
        compile 'com.android.support:support-annotations:+' 
    } 
    
  • 轉到文件/設置項目設置檢查並搜索 「可空」。

    恆定的條件下&例外@ NOTNULL/@可空問題,單擊配置註釋,選擇Android的註解。

    您可能還需要檢查出推薦@Nullable註解:恆定的條件下&例外,或可能在調整其他選項。

+3

你的答案解決了我的問題。只是一件事:顯示「避免使用+版本號」警告..​​.我已經設置我的版本是這樣的: 'compile'c​​om.android.support:support-annotations:23.1.1'' – Primoz990

3

現在你應該使用註釋從android.support.annotation包。我只是不知道,當他們加入他們作爲docs沒有典型的一句「在API級別X」,我不喜歡閱讀博客等>]

import android.support.annotation.NonNull; 

... 

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

對於使用Android支持像 - @Nullable,@NonNull等。在你的項目中必須導入android支持註釋庫。只是在gradle這個文件

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

而且導入包加入這一行dependensies上課。
對於使用@Nullable註釋:

import android.support.annotation.Nullable; 

對於@NonNull

import android.support.annotation.NonNull; 

更多信息,你可以在這裏找到Android developers