सवाल नॉटनुल या नलबल आयात करना और एंड्रॉइड स्टूडियो संकलित नहीं होगा


जब मैं एक पैरामीटर में @NotNull या @Nullable एनोटेशन जोड़ता हूं एंड्रॉइड स्टूडियो स्वचालित रूप से मुझे /lib/annotations.jar जोड़ने और आयात करने में मदद करता है

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

लेकिन इसके बाद, परियोजना संकलित नहीं होगी। अगर मैं एनोटेशन को भी हटा देता हूं लेकिन आयात कथन रखता हूं तो परियोजना अभी भी संकलित नहीं होगी। परंतु अगर मैं नॉटनुल और नलबल के लिए आयात कथन को हटाता हूं तो प्रोजेक्ट संकलित करता है ठीक!

एंड्रॉइड स्टूडियो एक सामान्य त्रुटि देता है:

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\

किसी को इसके लिए कोई विचार है? (मैं जावा और एंड्रॉइड प्रोग्रामिंग दोनों के लिए नया हूँ)


44
2018-05-22 11:46


मूल


मैं धीरे-धीरे परिचित नहीं हूं, लेकिन आपको शायद निर्भरता जोड़नी चाहिए annotations.jar सेवा मेरे build.gradle। कुछ इस तरह dependencies { compile files('full/path/to/annotations.jar') } - Vladimir Mironov
धन्यवाद, इस मुद्दे को ठीक किया! मैंने सोचा था कि निर्भरता जोड़ना एंड्रॉइड स्टूडियो स्वचालित रूप से किया गया था जब मैंने पहली बार @NotNull लिखा था और यह चाहता था कि मैं कुछ जोड़ूं। - Moberg
आप यहां इस व्यवहार के लिए स्पष्टीकरण पा सकते हैं stackoverflow.com/questions/16622410/... - Vladimir Mironov
@vmironov अगर आप इसे एक उत्तर के रूप में जोड़ते हैं तो मैं इसे स्वीकार कर सकता हूं। - Moberg


जवाब:


मुझे लगता है, सही तरीका आपके build.gradle निर्भरताओं (इस उदाहरण में नवीनतम उपलब्ध संस्करण) में MavenCentral भंडार से मूल JetBrains लाइब्रेरी का उपयोग कर रहा है:

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

53
2017-12-08 17:08



implementation के बजाय प्रयोग किया जाता है compile नए संस्करणों में - Diblo Dk


आप एंड्रॉइड के स्वयं का भी उपयोग कर सकते हैं @NonNull और @Nullable:

  • निम्नलिखित में जोड़ें build.gradle:

    dependencies {
        ...
        // For @Nullable/@NonNull
        compile 'com.android.support:support-annotations:+'
    }
    
  • के लिए जाओ फ़ाइल / सेटिंग → परियोजना सेटिंग्स → निरीक्षण और "शून्य" के लिए खोजें।

    में लगातार स्थितियां और अपवाद तथा @ NotNull / @ Nullable समस्याओं, क्लिक करें एनोटेशन कॉन्फ़िगर करें और एंड्रॉइड की एनोटेशन का चयन करें।

    आप भी जांचना चाह सकते हैं @ निरर्थक एनोटेशन का सुझाव दें ... के अंतर्गत लगातार स्थितियां और अपवाद, या संभवतः अन्य विकल्पों को ट्विक करें।


39
2017-09-11 13:04



आपके उत्तर ने मेरी समस्या हल कर दी है। बस एक बात: "संस्करण संख्या में + का उपयोग करने से बचें" चेतावनी दिखायी गई है ... मैंने अपना संस्करण इस तरह सेट किया है: compile 'com.android.support:support-annotations:23.1.1' - Primoz990


Android समर्थन एनोटेशन का उपयोग करने के लिए - @Nullable, @NonNull आदि .. आपकी प्रोजेक्ट में एंड्रॉइड समर्थन एनोटेशन लाइब्रेरी आयात की जानी चाहिए। केवल इस लाइन को निर्भरताओं में जोड़ें gradle फ़ाइल में

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

तथा आयात पैकेज वर्ग के लिए।
@Nullable एनोटेशन का उपयोग करने के लिए:

import android.support.annotation.Nullable;

@NonNull के लिए

import android.support.annotation.NonNull;

अधिक जानकारी आप यहां पा सकते हैं एंड्रॉइड डेवलपर्स


8
2018-03-10 20:06





फिलहाल, एंड्रॉइड एपीआई में या समर्थन लाइब्रेरी में कोई गैर-शून्य / निरर्थक एनोटेशन नहीं है। आप IntelliJ का भी उपयोग नहीं कर सकते क्योंकि वे ग्रैडल के साथ निर्माण करते समय संकलन कक्षा में नहीं हैं।

हालांकि, आप आसानी से अपना खुद का बना सकते हैं। यह बहुत सरल है:

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

एक बार यह डाउन हो जाने पर, आप इसे पहचानने के लिए इंटेलिजे (या एंड्रॉइड स्टूडियो) को कॉन्फ़िगर कर सकते हैं (और मिलान @Nullable) नल-चेक के लिए उपयोग की जाने वाली डिफ़ॉल्ट एनोटेशन होने के लिए।

ऐसा करने के लिए, IntelliJ प्राथमिकताओं में, नीचे जाएं Inpections, और फिर पाते हैं @NotNull/@Nullable problems के तहत प्रवेश Probable Bugs निरीक्षण पेड़ में।

आइटम का चयन करें, और निचले दाएं भाग में आपके पास "एनोटेशन कॉन्फ़िगर करें" बटन होगा। यह आपको अपनी टिप्पणियों को सेट करने की अनुमति देगा क्योंकि एक इंटेलिजे इस निरीक्षण के लिए उपयोग करेगा।


5
2018-05-23 06:28



मैं एंड्रॉइड एनोटेशन का उपयोग कैसे करूं? क्या मतलब है आपका androidannotations.org ? - Moberg
मैं सभी Xav पर ढांचे में @NotNull एनोटेशन नहीं देखता ... - superjugy
मुझे गलत समझा गया था। मैं इसे संपादित करूंगा। - Xavier Ducrohet
अपवॉट क्योंकि इस टिप को किसी भी अतिरिक्त तृतीय पक्ष पुस्तकालयों की आवश्यकता नहीं है - Dominik Obermaier


अपनी build.gradle फ़ाइल के निर्भरता अनुभाग में निम्नलिखित जोड़ने का सबसे आसान तरीका।

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

संपादित करें: मैवेन रिपोजिटरी का उपयोग करने के लिए @ रिचीएचएच के विचार का उपयोग करने के लिए अपडेट किया गया है, जो निश्चित रूप से ऐसा करने का तरीका है।


3
2017-08-22 09:18



आसान और क्लीनर मैवेन निर्भरता को जोड़ना है जो मुझे लगता है और फिर धीरे-धीरे इसका ख्याल रखना चाहिए। उदाहरण निर्भरता {compile 'com.intellij: एनोटेशन: + @ जार'} - RichieHH
हाँ, शायद यह सबसे अच्छा है - Ben Clayton


आजकल आपको एनोटेशन का उपयोग करना चाहिए android.support.annotationपैकेज। मुझे यकीन नहीं है कि जब उन्होंने उन्हें जोड़ा था डॉक्स उस सामान्य वाक्य "एपीआई स्तर एक्स में जोड़ा गया" नहीं है और मुझे ब्लॉग पढ़ने आदि की तरह महसूस नहीं होता है>]

import android.support.annotation.NonNull;

...

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

3
2018-05-16 07:54





सबसे अच्छा तरीका है मैवेन निर्भरता का उपयोग करना

  1. जोड़कर, भंडार पथ सेट करें

    repositories {
        maven {
            url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases"
        }
    }
    
  2. निर्भरता जोड़ें

    dependencies {
        compile 'org.jetbrains:annotations:7.0.2'
    }
    
  3. फायदा!


0
2017-12-08 11:34