আমি একটি সাধারণ ইউনিট পরীক্ষা তৈরি করেছি তবে ইন্টেলিজি ভুলভাবে এটি লালকে হাইলাইট করছে। এটিকে ত্রুটি হিসাবে চিহ্নিত করা হচ্ছে
শিম নেই?
আপনি নীচে দেখতে পারেন এটি পরীক্ষা পাস? সুতরাং এটি অবশ্যই অটোওয়ার্ড হওয়া উচিত?
আমি একটি সাধারণ ইউনিট পরীক্ষা তৈরি করেছি তবে ইন্টেলিজি ভুলভাবে এটি লালকে হাইলাইট করছে। এটিকে ত্রুটি হিসাবে চিহ্নিত করা হচ্ছে
শিম নেই?
আপনি নীচে দেখতে পারেন এটি পরীক্ষা পাস? সুতরাং এটি অবশ্যই অটোওয়ার্ড হওয়া উচিত?
উত্তর:
তাদের টীকাটি ব্যবহার করে একটি স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করার সময় আমার একই সমস্যা ছিল @SpringBootApplication
। এই টীকা প্রতিনিধিত্ব করে @Configuration
, @EnableAutoConfiguration
এবং @ComponentScan
অনুযায়ী বসন্ত রেফারেন্স ।
যেমনটি প্রত্যাশা করা হয়েছিল, নতুন টিকাটি সঠিকভাবে কাজ করেছে এবং আমার অ্যাপ্লিকেশনটি সুচারুভাবে চলছিল তবে, ইনটেলিজ অসম্পূর্ণ @Autowire
নির্ভরতা সম্পর্কে অভিযোগ রেখেছিল । যত তাড়াতাড়ি আমি ব্যবহারে ফিরে পরিবর্তিত @Configuration
, @EnableAutoConfiguration
এবং @ComponentScan
আলাদাভাবে, ত্রুটি বন্ধ হয়ে যায়। মনে হচ্ছে ইন্টেলিজ ১৪.০.৩ (এবং সম্ভবত, পূর্ববর্তী সংস্করণগুলিও) @SpringBootApplication
টীকাটি সনাক্ত করতে এখনও কনফিগার করা হয়নি ।
আপাতত, যদি ত্রুটিগুলি আপনাকে এতটা বিঘ্নিত করে, তবে সেই তিনটি পৃথক টীকাতে ফিরে আসুন। অন্যথায়, ইন্টেলিজ উপেক্ষা করুন ... আপনার পরীক্ষা পাসের পরে আপনার নির্ভরতা রেজোলিউশনটি সঠিকভাবে কনফিগার করা হয়েছে।
সদা মনে রাখিবে...
মানুষ সবসময় মেশিনের চেয়ে বড়।
@SpringBootApplication
আমি এই ত্রুটিটি পেয়েছি। আমি @ Jaõs Matos এর পরামর্শ অনুসরণ করে scanBasePackages
প্যারামিটারটি ব্যবহার করে @SpringBootApplication
এবং প্যাকেজ / নেমস্পেসগুলি নির্দিষ্ট করেছিলাম যা স্ক্যান করা উচিত।
@Repository
সংগ্রহস্থল শ্রেণীর উপর স্প্রিং টীকা যুক্ত করুন ।
আমি জানি এটি এ টিকা ছাড়াই কাজ করা উচিত। আপনি যদি এটি যুক্ত করেন তবে ইন্টেলিজ ত্রুটি প্রদর্শন করবে না।
@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;
এটি সম্ভবত কোনও ভাল সমাধান নয় (আমার ধারণা আপনি দু'বার সংগ্রহশালা নিবন্ধ করার চেষ্টা করছেন)। তবে আমার জন্য কাজ করুন এবং ত্রুটিগুলি দেখাবেন না।
হতে পারে ইন্টেলিজজের নতুন সংস্করণে এটি ঠিক করা যেতে পারে: https://youtrack.jetbrains.com/issue/IDEA-137023
আমার ইন্টেলিজ আইডিইএ আলটিমেটের সংস্করণ (2016.3.4 বিল্ড 163) এটি সমর্থন করে বলে মনে হচ্ছে। কৌশলটি হ'ল আপনাকে স্প্রিং ডেটা প্লাগইন সক্ষম করতে হবে।
কখনও কখনও আপনাকে নির্দেশ করতে হয় যেখানে @Comp घटकScan উপাদানগুলির জন্য স্ক্যান করতে হবে। আপনি এই টীকাগুলির প্যারামিটার হিসাবে প্যাকেজগুলি পাস করার মাধ্যমে এটি করতে পারেন, যেমন:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
যাইহোক, ইতিমধ্যে উল্লিখিত হিসাবে, @ স্প্রিংবুট অ্যাপ্লিকেশন টীকাটি @ কমপোজেন্টস্ক্যানকে প্রতিস্থাপন করে, সুতরাং এই জাতীয় ক্ষেত্রে আপনাকে অবশ্যই এটি করতে হবে:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
অন্তত আমার ক্ষেত্রে, ইন্টেলিজ অভিযোগ করা বন্ধ করে দিয়েছে।
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
এবং যদিও অ্যাপটি ভালভাবে কাজ করেছে, ইন্টেলিজ এটি পছন্দ করেনি। @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
আমার জন্য স্থির!
আমি সবসময় এই সমস্যাটি অনুসরণ করেই সমাধান করি .. সেটিংস> পরিদর্শনগুলি> স্প্রিং কোর> কোডটি ত্রুটি থেকে তীব্রতার বিকল্পটি সতর্ক করতে পরিবর্তনের চেয়ে কোড
আমি স্প্রিং-বুট ২.০ ব্যবহার করছি, এবং ইন্টিলিজ 2018.1.1 চূড়ান্ত সংস্করণ এবং আমি একই সমস্যার মুখোমুখি হয়েছি।
আমি মূল অ্যাপ্লিকেশন শ্রেণিতে @EnableAutoConfigration স্থাপন করে সমাধান করেছি
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
আপনার বিন বিন্যাস ফাইলটি লাগানো @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");
}
}
আপনি যদি নিজের আইডিইকে খুশি করতে আপনার কোডটিতে কোনও পরিবর্তন করতে চান না। আমি স্প্রিং দিকটিতে সমস্ত উপাদান যুক্ত করে এটি সমাধান করেছি।
যতক্ষণ না আপনার পরীক্ষাগুলি উত্তীর্ণ হয় ততক্ষণ alt + enter
ত্রুটিটি নিয়ে কার্সারটি নিয়ে আঘাত করুন এবং প্রথম আইটেমের সাবমেনুতে আপনি খুঁজে পাবেন Disable Inspection
যে এটি নির্বাচন করুন
স্প্রিং বুট অ্যাপ্লিকেশনটিতে আমার একই সমস্যা ছিল। অ্যাপ্লিকেশনটি ফিগেন (এনটোটেড ইন্টারফেসগুলি থেকে HTTP ক্লায়েন্ট সিনথেটিজিং অনুরোধগুলি) ব্যবহার করে। ইন্টারফেসটি দিয়ে SomeClient
এ্যানোটেট করা থাকলে @FeignClient
, ফিগেন এই ইন্টারফেসটি প্রয়োগ করে রানটাইম প্রক্সি ক্লাস তৈরি করে। যখন কিছু স্প্রিং উপাদান শিমের প্রকারের স্বায়ত্তশাসনের চেষ্টা করে SomeClient
, আইডিয়া কোনও প্রকার বিনের সন্ধান না করায় অভিযোগ করা হয় SomeClient
যেহেতু প্রকৃত শ্রেণিতে কোন প্রকল্প নেই এবং আইডিয়া কোনওভাবেই @FeignClient
টীকা বুঝতে শেখানো হয় না ।
সমাধান: SomeClient
সাথে ইন্টারফেসটি টীকা দিন @Component
। (আমাদের ক্ষেত্রে, আমরা সরাসরি @FeignClient
টীকাগুলি ব্যবহার করি না SomeClient
, আমরা বরং মেটাঅনোটেশন ব্যবহার করি @OurProjectFeignClient
যা টীকায়িত হয় @FeignClient
এবং এতে @Component
টীকা যুক্ত করাও কার্যকর হয়))
@Component
ইন্টারফেসে যুক্ত করা সমস্যার সমাধান করে। তবে আমি মনে করি এটি সঠিক উপায় নয় ... আমার মতে এটি ইন্টেলিজ আইডিইএর একটি বাগ বা এতটা কঠিন না হয়ে ইন্টেলিজ আইডিইএ আরও নতুন ফিগান সংস্করণের জন্য প্রস্তুত নয়। এটি @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
।
যেহেতু আমি মনে করি যে আপনার AppConfiguraion.java
প্যাকেজটি আপনার টীকাগুলির (@ পরিষেবা, @ কম্পোনেন্ট ...) এর প্যাকেজের চেয়ে গভীর ,
যেমন "package/include/your/annotation/component/deeper/config"
।
আমার আবেদনে আমারও একই সমস্যা ছিল had যখন আমি টীকাগুলি ভুল হাইলাইট করা অদৃশ্য হয়ে যায়।
@ContextConfiguration(classes = {...})
আমি যখন এই ত্রুটিটি IntelliJ v.14 এ প্রদর্শিত হবে তখন এই ত্রুটিটি আড়াল করার জন্য আমি এই টিকাটি ব্যবহার করছি:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
আমার জন্য সমাধানটি @EnableAutoConfiguration
অ্যাপ্লিকেশন ক্লাসে @SpringBootApplication
এটি আন্ডারলাইন করে দেওয়ার আওতায় চলেছিল কারণ এটি অনর্থক। এটি মুছুন এবং ভোইলা নিখোঁজ মটরশুটি সম্পর্কে আপনার সমস্ত সতর্কতা অদৃশ্য! নিরীহ বসন্ত ...
আমার বসন্ত বুট অ্যাপ্লিকেশনে এই ইস্যুটির আমার সমাধানটি ছিল বসন্ত অ্যাপ্লিকেশন প্রসঙ্গটি খোলার জন্য এবং স্বয়ংক্রিয়ভাবে নিখোঁজ শিমের জন্য ক্লাস যুক্ত করা!
(প্রজেক্ট স্ট্রাকচার মেনু বা স্প্রিং টুল উইন্ডোর মাধ্যমে অ্যাক্সেস করুন ... "স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গে" সম্পাদনা করুন)
সুতরাং স্প্রিং অ্যাপ্লিকেশন কনটেক্সটটির পরিবর্তে কেবলমাত্র আমার উদাহরণ অ্যাপ্লিকেশন বসন্তের কনফিগারেশন এতে অন্তর্ভুক্ত রয়েছে বিনটি:
SpringApplicationContext:
এবং voilà: ত্রুটি বার্তা অদৃশ্য!
এটির সমাধানের জন্য আমাকে কেবল @EnableAutoConfigration ব্যবহার করতে হয়েছিল, তবে এই ত্রুটির কোনও কার্যকরী প্রভাব ছিল না।
এটি বসন্ত বুট অ্যাপ্লিকেশন প্রধান শ্রেণীর @EnableAutoConfigration স্থাপন করে সমাধান করা যেতে পারে।
কখনও কখনও - আমার ক্ষেত্রে এটি - কারণটি একটি ভুল আমদানি। আমি দুর্ঘটনাক্রমে আমদানি করেছি
import org.jvnet.hk2.annotations.Service
পরিবর্তে
import org.springframework.stereotype.Service
আইডির প্রস্তাবিত আমদানিতে অন্ধভাবে প্রথম পছন্দটি গ্রহণ করে। প্রথমবারের মতো এটি আমাকে কয়েক মিনিট সময় নিয়েছিল :-)
আশ্চর্যের বিষয় হল, একটি ফিগেন ওরিয়েন্টেড প্রকল্প যা সফলভাবে Eclipse দিয়ে চলেছিল ইন্টেলিজিতে চলতে পারে নি। অ্যাপ্লিকেশনটি শুরু করার সময়, ইন্টেলিজ ফিগাইন ক্লায়েন্ট সম্পর্কে অভিযোগ করেছিলেন আমি সার্ভিস ইম্পল স্তরটি ইনজেকশনের চেষ্টা করে বলেছিলাম: ফিল্ড পার্সনরেস্টক্লিয়েন্ট (আমার ফিগান ক্লায়েন্ট) এর মধ্যে ... একটি বিন বিনের প্রয়োজন ... যা খুঁজে পাওয়া যায় নি। আপনার কনফিগারেশনে '....' টাইপের শিমের সংজ্ঞাটি বিবেচনা করুন।
আমি কী ভুল তা বোঝার চেষ্টা করে দীর্ঘ সময় নষ্ট করেছি। আমি একটি সমাধান পেয়েছি (ইন্টেলিজের জন্য) যা আমি পুরোপুরি বুঝতে পারি না:
বা গ্রহণ চয়ন করুন :)
পরীক্ষার ক্লাসের জন্য @ অটো কনফিগুরে মক এমভিসি ব্যবহার করুন।
সহজ আপনি 2 পদক্ষেপ করতে হবে
==>> change @Autowired to @Resource
ইন্টেলিজ আইডিএএ আলটিমেট
আপনার প্রধান ক্লাসটি ইন্টেলিজ স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গে যুক্ত করুন, উদাহরণস্বরূপ অ্যাপ্লিকেশন.জভা
File
-> Project Structure..
বাম দিক: প্রকল্প সেটিং -> মডিউল
ডান দিক: আপনার প্যাকেজ কাঠামোটি সন্ধান করুন
Spring
এবং যুক্ত করুন+
Application.java