intellij गलत तरीके से यह कहते हुए कि कोई भी प्रकार की फलियां नहीं मिलीं जो कि स्वयंभू भंडार के लिए मिली हों


138

मैंने एक साधारण इकाई परीक्षण बनाया है, लेकिन इंटेलीजे गलत तरीके से इसे उजागर कर रहा है। इसे एक त्रुटि के रूप में चिह्नित करना

कोई सेम नहीं?

यहाँ छवि विवरण दर्ज करें

जैसा कि आप नीचे देख सकते हैं कि यह परीक्षा पास करता है? तो यह स्वत: बंद होना चाहिए?

यहाँ छवि विवरण दर्ज करें


3
इंटेलीज कभी-कभी झूठी सकारात्मक ऑटोवेयर त्रुटियों को देता है। उदाहरण के लिए स्प्रिंग बूट एप्लिकेशन में, जहां EnableAutoConfiguration के पीछे बहुत सारे कॉन्फ़िगरेशन छिपे हुए हैं। उसके लिए एक खुला मुद्दा है। अन्य कारण गलत तरीके से कॉन्फ़िगर किया जा सकता है स्प्रिंग पहलू। मैं आमतौर पर इन स्थितियों में निरीक्षण की गंभीरता को कम कर रहा हूं ताकि यह कम अप्रिय हो ...
बोहुस्लाव बर्गहार्ट

जवाबों:


177

उनके एनोटेशन का उपयोग करके स्प्रिंग बूट एप्लिकेशन बनाते समय मेरे पास यही मुद्दा था @SpringBootApplication। यह एनोटेशन प्रतिनिधित्व करता है @Configuration, @EnableAutoConfigurationऔर वसंत संदर्भ के@ComponentScan अनुसार ।

जैसा कि अपेक्षित था, नए एनोटेशन ने ठीक से काम किया और मेरा आवेदन सुचारू रूप से चला लेकिन, इंटेलीज ने अधूरी @Autowireनिर्भरता के बारे में शिकायत की । जैसे ही मैंने उपयोग करना वापस बदला @Configuration, @EnableAutoConfigurationऔर @ComponentScanअलग से, त्रुटियां बंद हो गईं । ऐसा लगता है कि Intellij 14.0.3 (और सबसे अधिक संभावना है, पहले के संस्करण भी) अभी तक @SpringBootApplicationएनोटेशन को पहचानने के लिए कॉन्फ़िगर नहीं किए गए हैं ।

अभी के लिए, यदि त्रुटियाँ आपको बहुत परेशान करती हैं, तो उन तीन अलग-अलग एनोटेशन पर वापस जाएं। अन्यथा, Intellij को नजरअंदाज करें ... आपकी निर्भरता संकल्प सही ढंग से कॉन्फ़िगर की गई है, क्योंकि आपका टेस्ट पास हो गया है।

हमेशा याद रखें...

मनुष्य हमेशा मशीन से बड़ा होता है।


1
यह मुद्दा अब Intellij के नए संस्करणों (2017.1 पर जांचा गया) के साथ तय किया गया है
Sourabh

45
मुझे अभी भी यह 2017.2 के साथ मिल रहा है, और यह अंतिम लाइसेंस के लिए भुगतान किया गया है।
थॉमस कार्लिसल

1
मैं इसे 2017.2 के साथ मिल रहा हूं और स्प्रिंटबॉटटेस्ट बाहरी वर्ग और स्प्रिंग क्लाउड स्ट्रीम टेस्टिंग उदाहरण के अनुसार स्प्रिंगबूटऐप्लिकेशन स्टेटिक इनर क्लास: docs.spring.io/spring-cloud-stream/docs/current/reference/html/…
danebez

4
IntelliJ (उदाहरण 2017) के अधिक हाल के संस्करणों के लिए आपको स्प्रिंग डेटा प्लगइन को सक्षम करना होगा और फिर आपको उपरोक्त वर्कआर्डर्स में से किसी की आवश्यकता नहीं होगी। नीचे एक और उत्तर है जो आपको बताता है कि ऐसा कैसे करना है।
नॉर्बर्ट

4
IntelliJ 2018.2 के साथ, स्प्रिंग बूट 2.0.5 का उपयोग करके और @SpringBootApplicationमुझे यह त्रुटि प्राप्त हुई। मैंने पैकेज / नामस्थानों के scanBasePackagesपैरामीटर का उपयोग करके @ Jaõs Matos की सलाह का पालन किया जिसे @SpringBootApplicationस्कैन किया जाना चाहिए।
डेव गुडचाइल्ड

53

@Repositoryरिपॉजिटरी वर्ग के ऊपर स्प्रिंग एनोटेशन जोड़ें ।

मुझे पता है कि इस एनोटेशन के बिना काम करना चाहिए। लेकिन अगर आप इसे जोड़ते हैं, तो IntelliJ त्रुटि नहीं दिखाएगी।

@Repository
public interface YourRepository ...
...

यदि आप विस्तार Repositoryवर्ग के साथ स्प्रिंग डेटा का उपयोग करते हैं तो यह संघर्षपूर्ण पगमार्क होगा। फिर आपको एक्सप्लोसिव पगकेस का संकेत देना चाहिए।

import org.springframework.data.repository.Repository;
...

@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
    ...
}

और आगे आप त्रुटियों के बिना अपने भंडार को स्वाहा कर सकते हैं।

@Autowired
YourRepository yourRepository;

यह शायद एक अच्छा समाधान नहीं है (मुझे लगता है कि आप दो बार रिपोसिटोरियम को पंजीकृत करने की कोशिश कर रहे हैं)। लेकिन मेरे लिए काम करें और त्रुटियों को न दिखाएं।

शायद IntelliJ के नए संस्करण में तय किया जा सकता है: https://youtrack.jetbrains.com/issue/IDEA-137023


3
इस Youtrack.jetbrains.com/issue/IDEA-148113 के अनुसार यह संस्करण 16 में तय किया गया है ... (सांस रोककर)
ismoore999

@Component भी काम करने लगता है। लगता है कि एक को बस इंटरफ़ेस / क्लास को स्कैन करने के लिए मजबूर करने की आवश्यकता है
ब्रेट

अब आपको @Repository को जोड़ने की आवश्यकता नहीं है। बस स्प्रिंग डेटा प्लगइन पर।
शिन किम

3
तीन साल बाद और यह फिर से टूट गया है
garyM

मैंने अपने मैपर इंटरफ़ेस (mybatis) के लिए / @ मैपर का उपयोग किया। IDEA ने इस चेतावनी को फेंक दिया। मैंने इसे बदल दिया / @ रिपॉजिटरी की चेतावनी चली गई।
बज़ुओ

32

IntelliJ IDEA अल्टीमेट (2016.3.4 बिल्ड 163) के मेरे संस्करण का समर्थन करने के लिए लगता है। चाल यह है कि आपको स्प्रिंग डेटा प्लगइन को सक्षम करने की आवश्यकता है।

यहाँ छवि विवरण दर्ज करें


इसने मेरे लिए भी इस मुद्दे को तय कर दिया है - ऐसा लगता है कि यह किसी के लिए भी वास्तविक मुद्दा हो सकता है, अन्यथा उनके कोड का सेटअप सही है!
मट्टू प्र

5
2017.2.7 में काम नहीं करता है। प्लगइन सक्षम है, लेकिन चेतावनी अभी भी मौजूद है।
ब्रेनफ्रॉजन

IJ अल्टीमेट 2018.2.5 में मेरे लिए काम किया।
JL_SO

23

कभी-कभी आपको यह इंगित करने की आवश्यकता होती है कि घटकों के लिए @ComponentScan को कहां स्कैन करना चाहिए। आप इस एनोटेशन के पैरामीटर के रूप में पैकेज को पास करके ऐसा कर सकते हैं, जैसे:

@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})

हालांकि, जैसा कि पहले ही उल्लेख किया गया है, @SpringBootApplication एनोटेशन की जगह @ComponentScan है, इसलिए ऐसे मामलों में आपको भी ऐसा ही करना होगा:

@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})

कम से कम मेरे मामले में, इंटेलीज ने शिकायत करना बंद कर दिया।


2
यह निश्चित रूप से बेहतर, क्लीनर समाधान है, और यह पुष्टि कर सकता है कि इसने चेतावनी को हटा दिया। धन्यवाद!
डेव गुडचिल्ड

2
मेरे मामले में मेरे पास था @SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) और यद्यपि एप्लिकेशन ने ठीक काम किया, लेकिन intellij को यह पसंद नहीं आया। @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})मेरे लिए नियत बदलना !
ग्रिफोगो

1
यह अब तक का सबसे अच्छा समाधान है, क्योंकि यह IDEs के बीच पोर्टेबल है और स्पष्ट रूप से डेवलपर इरादे का संचार करता है।
MusikPolice

मैं परम 2019.3.1 स्प्रिंग बूट 2.2.1 और जावा 11.0.4 का उपयोग कर रहा हूं। इकाई परीक्षण फ़ाइलों में समस्या अभी भी मौजूद है।
गैरीएम

1
क्या @GriffoGoes ने सुझाव दिया कि मेरी समस्या ठीक हो गई है, क्योंकि मैं एक बहु मॉड्यूल संरचना का उपयोग कर रहा था, वह मेरा सबसे अच्छा समाधान था
जुआन मोनसाल्व

20

मैं इस समस्या को हमेशा डी करने के बाद हल करता हूं .. सेटिंग्स> इंस्पेक्शन> स्प्रिंग कोर> कोड से आप गलती की चेतावनी के विकल्प को गलती से स्थानांतरित कर देते हैं

यहाँ छवि विवरण दर्ज करें


2
मैं इस समाधान के साथ तब तक चला गया जब तक कि वसंत पर एक फिक्स नहीं किया जाता है: youtrack.jetbrains.com/issue/IDEA-182912
गैरी पोली

15

मैं स्प्रिंग-बूट 2.0, और intellij 2018.1.1 अंतिम संस्करण का उपयोग कर रहा हूं और मैंने उसी मुद्दे का सामना किया।

मैंने मुख्य एप्लिकेशन वर्ग में @EnableAutoConfiguration लगाकर हल किया

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

13
यह मेरे लिए "काम" भी करता है, लेकिन फिर intellij शिकायत करता है: Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration (\ _ (works) _ /
माइकल

6

जांचें कि क्या आपने अपने सेवा वर्ग में @ सेवा घोषणा रद्द कर दी है, यही मेरे लिए था।


5

डालने @Componentया @configurationअपने बीन विन्यास फ़ाइल में काम करने के लिए लगता है, यानी कुछ इस तरह:

@Configuration
public class MyApplicationContext {
    @Bean
    public DirectoryScanner scanner() {
        return new WatchServiceDirectoryScanner("/tmp/myDir");
    }
}

@Component
public class MyApplicationContext {
    @Bean
    public DirectoryScanner scanner() {
        return new WatchServiceDirectoryScanner("/tmp/myDir");
    }
}

4

अगर आप अपने IDE को खुश करने के लिए सिर्फ अपने लिए कोई बदलाव नहीं करना चाहते हैं। मैंने इसे सभी घटकों को स्प्रिंग फेस में जोड़कर हल किया है।

  1. "सेवा, प्रोसेसर और राउटर्स" या किसी भी ऐसे नाम के साथ एक समूह बनाएँ जिसे आप पसंद करते हैं;
  2. "स्प्रिंग एप्लिकेशन प्रसंग" को हटाएं और फिर से बनाएँ, उस समूह का उपयोग करें जिसे आपने पहले एक माता-पिता के रूप में बनाया था।

यहाँ छवि विवरण दर्ज करें


4

जब तक आपके परीक्षण पास हो रहे हैं तब तक आप अच्छे हैं, alt + enterत्रुटि पर कर्सर ले जाकर हिट करें और पहले आइटम के सबमेनू के अंदर आप Disable Inspectionचुन पाएंगे कि


धन्यवाद। वैसे, सभी परिवर्तनों को देखने का एक तरीका है जो इंटेलीजे सेटिंग्स में एक दृश्य में डिफ़ॉल्ट नहीं है (इसलिए आप जानते हैं कि आपने क्या बदला है)?
पाउडर 366

3

मैं स्प्रिंग बूट आवेदन में इसी तरह की समस्या थी। एप्लिकेशन Feign (एनोटेड इंटरफेस से HTTP क्लाइंट सिंथेटाइजिंग अनुरोध) का उपयोग करता है। इंटरफ़ेस के SomeClientसाथ एनोटेट होने के बाद @FeignClient, Feign इस इंटरफ़ेस को लागू करने के लिए रनटाइम प्रॉक्सी क्लास बनाता है। जब कुछ स्प्रिंग कंपोनेंट प्रकार की बीन को स्वायत्त करने की कोशिश करते हैं SomeClient, तो आइडिया शिकायत करता है कि कोई भी प्रकार का बीन नहीं SomeClientमिला क्योंकि कोई वास्तविक वर्ग वास्तव में परियोजना में मौजूद नहीं है और आइडिया को समझना नहीं सिखाया जाता है@FeignClient किसी भी तरह से एनोटेशन ।

समाधान: एनोटेट इंटरफेस के SomeClientसाथ @Component। (हमारे मामले में, हम सीधे @FeignClientएनोटेशन का उपयोग नहीं करते SomeClientहैं, हम मेटानेटेशन का उपयोग करते हैं, @OurProjectFeignClientजिसे एनोटेट किया जाता है @FeignClientऔर @Componentएनोटेशन को जोड़ने के साथ ही काम करता है।)


हां, @Componentइंटरफ़ेस में जोड़ने से समस्या हल हो जाती है। लेकिन मुझे लगता है कि यह सही तरीका नहीं है ... मेरी राय में यह IntelliJ IDEA में एक बग है या इतना कठिन नहीं है IntelliJ IDEA नए Feign संस्करणों के लिए तैयार नहीं है। यह बिना @Componentफेलियर वाले संस्करणों में काम करता है (जहां @FeignClientएनोटेशन org.springframework.cloud.netflix.feignइसके बजाय था org.springframework.cloud.openfeign- शायद यह मुद्दे का कारण है)। क्या आपने इसके लिए कोई और विवरण (शायद बग टिकट) पाया है?
जोसेफ रीचर्ड

नहीं, मैं, हालांकि मेरे मामले (जो बिना काम नहीं किया नहीं है @Component) है @FeignClientसे org.springframework.cloud.netflix.feign) पैकेज।
टॉमस ज़ालूस्की

3
JetBrains बग ट्रैकर पर मुद्दा यहाँ है: youtrack.jetbrains.com/issue/IDEA-168155
जोसेफ


2

और महत्वपूर्ण जानकारी का एक आखिरी टुकड़ा - जोड़ दें ComponentScanताकि ऐप को उन चीजों के बारे में पता चले जो इसे तार करने की आवश्यकता है। यह इस प्रश्न के मामले में प्रासंगिक नहीं है। हालांकि अगर कोई @autowiringभी प्रदर्शन नहीं किया जा रहा है तो यह आपके समाधान की संभावना है।

@Configuration
@ComponentScan(basePackages = {
    "some_package",
})
public class someService {

यह समझ में आता है और मेरे लिए चाल चली। चेतावनी क्यों बंद करें? चेतावनियों को उम्मीद के मुताबिक काम करना चाहिए!
वेबकॉमर

2

आपको जो करना है वह जोड़ना है

@ComponentScan("package/include/your/annotation/component") में है AppConfiguration.java

चूँकि मुझे लगता है कि आपका एनोटेशन घटक (@ सेवा, @Component ...) AppConfiguraion.javaपैकेज से अधिक गहरा है,

जैसे कि "package/include/your/annotation/component/deeper/config"


@ComponentScan ("package.include.your.annotation.component")!
इकोव सेनातोव

2

मुझे अपने आवेदन में इसी तरह की समस्या थी। जब मैंने एनोटेशन जोड़ा तो गलत तरीके से पेश किया गया।

@ContextConfiguration(classes = {...})

केवल परीक्षण पैकेज के लिए!
इकोव सेनातोव

2

जब मैं IntelliJ v.14 में प्रकट होता है, तो इस त्रुटि को छिपाने के लिए मैं इस एनोटेशन का उपयोग कर रहा हूं:

@SuppressWarnings("SpringJavaAutowiringInspection")

जब एक कंस्ट्रक्टर में स्वरबद्ध किया जाता है@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
लोरेन

2

मेरे लिए इसका समाधान यह था कि इसके निरर्थक होने को रेखांकित करने के लिए @EnableAutoConfigurationआवेदन वर्ग में जगह दी जाए @SpringBootApplication। इसे हटाएं और वॉयला करें आप सभी लापता सेम के बारे में चेतावनी गायब हो गए हैं! मूर्ख वसंत ...


2

मेरे मामले में, @Autowired के लिए मैं जिस निर्देशिका की कोशिश कर रहा था, वह उसी स्तर पर नहीं थी,

एक ही संरचना स्तर पर इसे स्थापित करने के बाद, त्रुटि गायब हो गई

आशा है कि यह कुछ मदद कर सकता है!


1

मेरे वसंत बूट आवेदन में इस मुद्दे का मेरा समाधान वसंत आवेदन के संदर्भ को खोलना और मैन्युअल रूप से लापता ऑटोवेड बीन के लिए वर्ग जोड़ना था!

(प्रोजेक्ट स्ट्रक्चर मेन्यू या स्प्रिंग टूल विंडो के माध्यम से एक्सेस ... "स्प्रिंग एप्लिकेशन संदर्भ" संपादित करें)

तो इसके बजाय SpringApplicationContext के साथ सिर्फ मेरे ExampleApplication वसंत विन्यास में यह भी लापता बीन शामिल हैं:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

et voilà: त्रुटि संदेश गायब हो गया!


1

यह अभी भी नवीनतम IntelliJ में एक बग हो सकता है और एक संभावित कैशिंग मुद्दे के साथ क्या करना है?

यदि आप ऊपर उल्लिखित mk321 के रूप में @Repository एनोटेशन जोड़ते हैं, सहेजते हैं, तो एनोटेशन को हटा दें और फिर से सहेजें, यह समस्या को ठीक करता है।


1

इस काम को करने के लिए आपको बस निम्नलिखित कोड की आवश्यकता है:

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}

1

मुझे इसे संबोधित करने के लिए सिर्फ @EnableAutoConfiguration का उपयोग करना था, हालांकि इस त्रुटि का कोई कार्यात्मक प्रभाव नहीं था।


1

इसे स्प्रिंग बूट एप्लिकेशन के मुख्य वर्ग पर @EnableAutoConfiguration लगाकर हल किया जा सकता है।


0

कभी-कभी - मेरे मामले में यह है - इसका कारण गलत आयात है। मैंने गलती से आयात कर लिया

import org.jvnet.hk2.annotations.Service

के बजाय

import org.springframework.stereotype.Service

आइडिया के सुझाए गए आयात में पहली पसंद को आँख बंद करके स्वीकार करना। मुझे पहली बार खुश करने के लिए कुछ मिनट लगे :-)


0

हैरानी की बात है कि ए फ़ीग ओरिएंटेड प्रोजेक्ट जो सफलतापूर्वक एक्लिप्स के साथ चला था, इंटेलीज में नहीं चल सकता था। जब आवेदन शुरू किया, InteliJ ने Feign ग्राहक के बारे में शिकायत की मैंने सर्विसआईएमपीएल लेयर पर इंजेक्ट करने की कोशिश की: फ़ील्ड personRestClient (मेरा Feign क्लाइंट) ... में एक प्रकार की बीन की आवश्यकता थी ... जो नहीं मिल सकी। अपने कॉन्फ़िगरेशन में '....' प्रकार की सेम को परिभाषित करने पर विचार करें।

मैंने बहुत समय बर्बाद करके यह समझने की कोशिश की कि क्या गलत है। मुझे एक समाधान मिला (InteliJ के लिए) जिसे मैं पूरी तरह से नहीं समझता:

  1. Alt Shift F10 (या मेनू चलाएँ)
  2. 'कॉन्फ़िगरेशन संपादित करें' चुनें
  3. कॉन्फ़िगरेशन विंडो में, चेकबॉक्स की जांच करें '' प्रदान की गई गुंजाइश 'के साथ निर्भरताएं शामिल हैं'
  4. अपना एप्लिकेशन चलाएं

या ग्रहण चुनें :)


0

जांचें कि क्या आपके बीन का पैकेज सही लिखा गया है

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}


0

मैंने IDEA में mybatis plugin स्थापित करके समस्या का हल किया। जब मैंने Mybatis प्लगइन स्थापित किया, तो यह गायब हो गया।


0

सरल आपको 2 चरण करने होंगे

  1. हाइबरनेट-कोर डिपैंडेंसी जोड़ें
  2. @ @ स्रोत को @ बदल दिया गया।
==>> change @Autowired to  @Resource

अपना जवाब समझाएं।
मेंटलबर्ग

0

इंटेलीज आईडिया अल्टीमेट

IntelliJ स्प्रिंग एप्लिकेशन प्रसंग में अपना मुख्य वर्ग जोड़ें, उदाहरण के लिए Application.java

File -> Project Structure..

बाईं ओर: प्रोजेक्ट सेटिंग -> मॉड्यूल

दाईं ओर: अपनी पैकेज संरचना में खोजें Springऔर जोड़ें+ Application.java


यह यूवी उत्तर के बराबर है
एंटोन बोंडारेंको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.