मैंने एक साधारण इकाई परीक्षण बनाया है, लेकिन इंटेलीजे गलत तरीके से इसे उजागर कर रहा है। इसे एक त्रुटि के रूप में चिह्नित करना
कोई सेम नहीं?
जैसा कि आप नीचे देख सकते हैं कि यह परीक्षा पास करता है? तो यह स्वत: बंद होना चाहिए?
मैंने एक साधारण इकाई परीक्षण बनाया है, लेकिन इंटेलीजे गलत तरीके से इसे उजागर कर रहा है। इसे एक त्रुटि के रूप में चिह्नित करना
कोई सेम नहीं?
जैसा कि आप नीचे देख सकते हैं कि यह परीक्षा पास करता है? तो यह स्वत: बंद होना चाहिए?
जवाबों:
उनके एनोटेशन का उपयोग करके स्प्रिंग बूट एप्लिकेशन बनाते समय मेरे पास यही मुद्दा था @SpringBootApplication
। यह एनोटेशन प्रतिनिधित्व करता है @Configuration
, @EnableAutoConfiguration
और वसंत संदर्भ के@ComponentScan
अनुसार ।
जैसा कि अपेक्षित था, नए एनोटेशन ने ठीक से काम किया और मेरा आवेदन सुचारू रूप से चला लेकिन, इंटेलीज ने अधूरी @Autowire
निर्भरता के बारे में शिकायत की । जैसे ही मैंने उपयोग करना वापस बदला @Configuration
, @EnableAutoConfiguration
और @ComponentScan
अलग से, त्रुटियां बंद हो गईं । ऐसा लगता है कि Intellij 14.0.3 (और सबसे अधिक संभावना है, पहले के संस्करण भी) अभी तक @SpringBootApplication
एनोटेशन को पहचानने के लिए कॉन्फ़िगर नहीं किए गए हैं ।
अभी के लिए, यदि त्रुटियाँ आपको बहुत परेशान करती हैं, तो उन तीन अलग-अलग एनोटेशन पर वापस जाएं। अन्यथा, Intellij को नजरअंदाज करें ... आपकी निर्भरता संकल्प सही ढंग से कॉन्फ़िगर की गई है, क्योंकि आपका टेस्ट पास हो गया है।
हमेशा याद रखें...
मनुष्य हमेशा मशीन से बड़ा होता है।
@SpringBootApplication
मुझे यह त्रुटि प्राप्त हुई। मैंने पैकेज / नामस्थानों के scanBasePackages
पैरामीटर का उपयोग करके @ Jaõs Matos की सलाह का पालन किया जिसे @SpringBootApplication
स्कैन किया जाना चाहिए।
@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
IntelliJ IDEA अल्टीमेट (2016.3.4 बिल्ड 163) के मेरे संस्करण का समर्थन करने के लिए लगता है। चाल यह है कि आपको स्प्रिंग डेटा प्लगइन को सक्षम करने की आवश्यकता है।
कभी-कभी आपको यह इंगित करने की आवश्यकता होती है कि घटकों के लिए @ComponentScan को कहां स्कैन करना चाहिए। आप इस एनोटेशन के पैरामीटर के रूप में पैकेज को पास करके ऐसा कर सकते हैं, जैसे:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
हालांकि, जैसा कि पहले ही उल्लेख किया गया है, @SpringBootApplication एनोटेशन की जगह @ComponentScan है, इसलिए ऐसे मामलों में आपको भी ऐसा ही करना होगा:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
कम से कम मेरे मामले में, इंटेलीज ने शिकायत करना बंद कर दिया।
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
और यद्यपि एप्लिकेशन ने ठीक काम किया, लेकिन intellij को यह पसंद नहीं आया। @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
मेरे लिए नियत बदलना !
मैं इस समस्या को हमेशा डी करने के बाद हल करता हूं .. सेटिंग्स> इंस्पेक्शन> स्प्रिंग कोर> कोड से आप गलती की चेतावनी के विकल्प को गलती से स्थानांतरित कर देते हैं
मैं स्प्रिंग-बूट 2.0, और intellij 2018.1.1 अंतिम संस्करण का उपयोग कर रहा हूं और मैंने उसी मुद्दे का सामना किया।
मैंने मुख्य एप्लिकेशन वर्ग में @EnableAutoConfiguration लगाकर हल किया
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
(\ _ (works) _ /
डालने @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");
}
}
अगर आप अपने IDE को खुश करने के लिए सिर्फ अपने लिए कोई बदलाव नहीं करना चाहते हैं। मैंने इसे सभी घटकों को स्प्रिंग फेस में जोड़कर हल किया है।
जब तक आपके परीक्षण पास हो रहे हैं तब तक आप अच्छे हैं, alt + enter
त्रुटि पर कर्सर ले जाकर हिट करें और पहले आइटम के सबमेनू के अंदर आप Disable Inspection
चुन पाएंगे कि
मैं स्प्रिंग बूट आवेदन में इसी तरह की समस्या थी। एप्लिकेशन 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
) पैकेज।
और महत्वपूर्ण जानकारी का एक आखिरी टुकड़ा - जोड़ दें ComponentScan
ताकि ऐप को उन चीजों के बारे में पता चले जो इसे तार करने की आवश्यकता है। यह इस प्रश्न के मामले में प्रासंगिक नहीं है। हालांकि अगर कोई @autowiring
भी प्रदर्शन नहीं किया जा रहा है तो यह आपके समाधान की संभावना है।
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
आपको जो करना है वह जोड़ना है
@ComponentScan("package/include/your/annotation/component")
में है AppConfiguration.java
।
चूँकि मुझे लगता है कि आपका एनोटेशन घटक (@ सेवा, @Component ...) AppConfiguraion.java
पैकेज से अधिक गहरा है,
जैसे कि "package/include/your/annotation/component/deeper/config"
।
मुझे अपने आवेदन में इसी तरह की समस्या थी। जब मैंने एनोटेशन जोड़ा तो गलत तरीके से पेश किया गया।
@ContextConfiguration(classes = {...})
जब मैं IntelliJ v.14 में प्रकट होता है, तो इस त्रुटि को छिपाने के लिए मैं इस एनोटेशन का उपयोग कर रहा हूं:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
मेरे लिए इसका समाधान यह था कि इसके निरर्थक होने को रेखांकित करने के लिए @EnableAutoConfiguration
आवेदन वर्ग में जगह दी जाए @SpringBootApplication
। इसे हटाएं और वॉयला करें आप सभी लापता सेम के बारे में चेतावनी गायब हो गए हैं! मूर्ख वसंत ...
मेरे वसंत बूट आवेदन में इस मुद्दे का मेरा समाधान वसंत आवेदन के संदर्भ को खोलना और मैन्युअल रूप से लापता ऑटोवेड बीन के लिए वर्ग जोड़ना था!
(प्रोजेक्ट स्ट्रक्चर मेन्यू या स्प्रिंग टूल विंडो के माध्यम से एक्सेस ... "स्प्रिंग एप्लिकेशन संदर्भ" संपादित करें)
तो इसके बजाय SpringApplicationContext के साथ सिर्फ मेरे ExampleApplication वसंत विन्यास में यह भी लापता बीन शामिल हैं:
SpringApplicationContext:
et voilà: त्रुटि संदेश गायब हो गया!
मुझे इसे संबोधित करने के लिए सिर्फ @EnableAutoConfiguration का उपयोग करना था, हालांकि इस त्रुटि का कोई कार्यात्मक प्रभाव नहीं था।
इसे स्प्रिंग बूट एप्लिकेशन के मुख्य वर्ग पर @EnableAutoConfiguration लगाकर हल किया जा सकता है।
कभी-कभी - मेरे मामले में यह है - इसका कारण गलत आयात है। मैंने गलती से आयात कर लिया
import org.jvnet.hk2.annotations.Service
के बजाय
import org.springframework.stereotype.Service
आइडिया के सुझाए गए आयात में पहली पसंद को आँख बंद करके स्वीकार करना। मुझे पहली बार खुश करने के लिए कुछ मिनट लगे :-)
हैरानी की बात है कि ए फ़ीग ओरिएंटेड प्रोजेक्ट जो सफलतापूर्वक एक्लिप्स के साथ चला था, इंटेलीज में नहीं चल सकता था। जब आवेदन शुरू किया, InteliJ ने Feign ग्राहक के बारे में शिकायत की मैंने सर्विसआईएमपीएल लेयर पर इंजेक्ट करने की कोशिश की: फ़ील्ड personRestClient (मेरा Feign क्लाइंट) ... में एक प्रकार की बीन की आवश्यकता थी ... जो नहीं मिल सकी। अपने कॉन्फ़िगरेशन में '....' प्रकार की सेम को परिभाषित करने पर विचार करें।
मैंने बहुत समय बर्बाद करके यह समझने की कोशिश की कि क्या गलत है। मुझे एक समाधान मिला (InteliJ के लिए) जिसे मैं पूरी तरह से नहीं समझता:
या ग्रहण चुनें :)
परीक्षण वर्ग के लिए @AutoConfigureMockMvc का उपयोग करें।
इंटेलीज आईडिया अल्टीमेट
IntelliJ स्प्रिंग एप्लिकेशन प्रसंग में अपना मुख्य वर्ग जोड़ें, उदाहरण के लिए Application.java
File
-> Project Structure..
बाईं ओर: प्रोजेक्ट सेटिंग -> मॉड्यूल
दाईं ओर: अपनी पैकेज संरचना में खोजें
Spring
और जोड़ें+
Application.java