intellij yanlış bir şekilde otomatik kablolu depo için hiçbir tür fasulye bulunamadı diyor


138

Basit bir birim testi oluşturdum, ancak IntelliJ yanlış kırmızı renkte vurgulanıyor. hata olarak işaretleme

Fasulye yok mu?

resim açıklamasını buraya girin

Aşağıda görebileceğiniz gibi testi geçiyor mu? Bu yüzden AutoWired olmalı?

resim açıklamasını buraya girin


3
IntelliJ bazen yanlış pozitif otomatik kablo hataları verir. Örneğin, EnableAutoConfiguration'ın arkasında bir çok yapılandırmanın gizlendiği Spring Boot uygulamalarında. Bunun için açık bir konu var. Diğer neden, Bahar yapılandırmasını yanlış yapılandırmış olabilir. Bu durumlarda genellikle yaptığım şey, denetim şiddetini düşürmek, böylece daha az rahatsız edici ...
Bohuslav Burghardt

Yanıtlar:


177

Ek açıklamalarını kullanarak bir Spring Boot uygulaması oluştururken de aynı sorunu yaşadım @SpringBootApplication. Bu açıklama gösterir @Configuration, @EnableAutoConfigurationve @ComponentScanuygun yay referans .

Beklendiği gibi, yeni ek açıklama düzgün bir şekilde çalıştı ve uygulamam sorunsuz bir şekilde çalıştı, ancak Intellij , yerine getirilmeyen @Autowirebağımlılıklar hakkında şikayet etmeye devam etti . En kısa zamanda kullanmaya geri değiştikçe @Configuration, @EnableAutoConfigurationve @ComponentScanayrı ayrı, hatalar durdurdu. Görünüşe göre Intellij 14.0.3 (ve büyük olasılıkla önceki sürümler de) @SpringBootApplicationek açıklamayı tanıyacak şekilde yapılandırılmamış .

Şimdilik, hatalar sizi çok rahatsız ediyorsa, bu üç ayrı ek açıklamaya geri dönün. Aksi takdirde Intellij'i yok sayın ... testiniz geçtiği için bağımlılık çözünürlüğünüz doğru yapılandırılmış.

Her zaman hatırla...

İnsan her zaman makineden daha büyüktür.


1
Sorun IntelliJ daha yeni sürümleri ile şimdi sabittir (2017.1 işaretli)
Sourabh

45
Hala 2017.2 ile alıyorum ve nihai lisans için ödeniyor.
Thomas Carlisle

1
Spring Cloud Stream test örneğine göre 2017.2 ve SprintBootTest dış sınıfı ve SpringBootApplication statik iç sınıfı ile alıyorum: docs.spring.io/spring-cloud-stream/docs/current/reference/html/…
danebez

4
IntelliJ'in (örneğin 2017) daha yeni sürümleri için Spring Data eklentisini etkinleştirmeniz gerekir ve yukarıdaki geçici çözümlerden herhangi birine ihtiyacınız yoktur. Aşağıda bunu nasıl yapacağınızı söyleyen başka bir cevap var.
Norbert

4
IntelliJ 2018.2 ile Spring Boot 2.0.5 kullanarak @SpringBootApplicationbu hatayı alıyordum. @ Jaõs Matos'ın tavsiyelerini takip ederek scanBasePackagesparametresini kullanarak taradım @SpringBootApplicationve taranması gereken paketi / ad alanlarını belirledim.
Dave Goodchild

53

@RepositoryDepo sınıfının üzerine Bahar ek açıklaması ekleyin .

Bu açıklama olmadan çalışması gerektiğini biliyorum. Ancak bunu eklerseniz IntelliJ hata göstermez.

@Repository
public interface YourRepository ...
...

Spring Data Repositorysınıfını genişleterek kullanırsanız , bu sayfa çakışmaları olur. O zaman açıklık sayfalarını belirtmelisiniz.

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

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

Ve sonra deponuzu hatasız olarak otomatik olarak bağlayabilirsiniz.

@Autowired
YourRepository yourRepository;

Muhtemelen iyi bir çözüm değildir (sanırım iki kez depo kaydetmeye çalışıyorsunuz). Ama benim için çalış ve hata gösterme.

Belki IntelliJ'in yeni sürümünde düzeltilebilir: https://youtrack.jetbrains.com/issue/IDEA-137023


3
Bu youtrack.jetbrains.com/issue/IDEA-148113'e göre sürüm 16'da sabittir ... (nefes tutar)
ismoore999

@Bileşen de çalışıyor gibi görünüyor. Birinin sadece arayüzü / sınıfı taranmaya zorlaması gerektiği anlaşılıyor
Brett

Artık @Repository eklemenize gerek yok. Sadece Spring Data eklentisinde.
Shin Kim

3
Üç yıl sonra tekrar kırıldı
garyM

Mapper arayüzüm (mybatis) için / @ Mapper kullandım. IDEA bu ​​uyarıyı veriyor. Uyarı gitti / @ Depo olarak değiştirdim.
bzuo

32

IntelliJ IDEA Ultimate (2016.3.4 Build 163) sürümüm bunu destekliyor gibi görünüyor. İşin püf noktası, Spring Data eklentisini etkinleştirmeniz gerektiğidir.

resim açıklamasını buraya girin


Bu da benim için sorunu düzeltti - Bu, aksi takdirde kod ayarlarını doğru şekilde yapan herkes için gerçek bir sorun olabilir gibi görünüyor!
Matsu S.

5
2017'de çalışmıyor.2.7. Eklenti etkin, ancak uyarı hala mevcut.
brainfrozen

İJ Ultimate 2018'de çalıştı.
JL_SO

23

Bazen @ComponentScan'ın bileşenleri nerede taraması gerektiğini belirtmeniz gerekir. Bunu, paketleri bu ek açıklamanın parametresi olarak ileterek yapabilirsiniz, örneğin:

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

Ancak, daha önce de belirtildiği gibi, @SpringBootApplication ek açıklaması @ComponentScan'ın yerini alır, bu nedenle bu gibi durumlarda aynı şeyi yapmanız gerekir:

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

En azından benim durumumda Intellij şikayet etmeyi bıraktı.


2
Bu kesinlikle daha iyi, daha temiz bir çözümdür ve bunun uyarıyı kaldırdığını doğrulayabilir. Teşekkürler!
Dave Goodchild

2
Benim durumumda vardı @SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) ve uygulama iyi çalıştı, ancak intellij beğenmedi. @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})Benim için düzeltildi!
GriffoGoes

1
IDE'ler arasında taşınabilir olduğu ve geliştirici amacını açıkça ilettiği için bu en iyi çözümdür.
MusikPolice

Nihai 2019.3.1 yaylı önyükleme 2.2.1 ve java 11.0.4 kullanıyorum. Sorun hala birim sınama dosyalarında var.
garyM

1
@GriffoGoes'un önerdiği sorunum düzeltildi, çünkü çoklu modül yapısını kullanıyordum, bu benim en iyi çözümümdü
Juan Monsalve


15

Spring-boot 2.0 kullanıyorum ve intellij 2018.1.1 nihai sürümü ve aynı sorunla karşılaştım.

Ana uygulama sınıfında @EnableAutoConfiguration yerleştirerek çözdüm

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

13
Bu da benim için "çalışıyor", ama sonra intellij şikayet ediyor: Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration ¯ \ _ (ツ) _ / ¯
Michael

6

Servis sınıfınızda @Service ek açıklamasını kaçırıp kaçırmadığınızı kontrol edin, benim için durum buydu.


5

Bean config dosyanıza koymak @Componentveya @configurationçalışmak gibi görünüyor, yani:

@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'nizi mutlu etmek için kodunuzda herhangi bir değişiklik yapmak istemiyorsanız. Tüm bileşenleri Spring modeline ekleyerek çözdüm.

  1. "Hizmet, İşlemciler ve Yönlendiriciler" adında bir grup veya istediğiniz herhangi bir ad oluşturun;
  2. "Spring Application Context" i kaldırın ve yeniden oluşturun, daha önce üst öğe olarak oluşturduğunuz grubu kullanın.

resim açıklamasını buraya girin


4

Eğer iyi geçiyoruz uzun Testlerinizin olarak itibarıyla isabet alt + enterhata imleci alarak ve bulacağınız ilk öğenin alt menü içinden Disable Inspectiono seçmek


Teşekkürler. Bu arada, IntelliJ Ayarlarında bir görünümde varsayılan olmayan tüm değişiklikleri görmenin bir yolu var (böylece ne değiştirdiğinizi biliyorsunuz)?
powder366

3

Spring Boot uygulamasında da benzer bir sorun yaşadım. Uygulama Feign (açıklamalı arayüzlerden gelen HTTP istemcisi sentezleme istekleri) kullanır. Arabirime SomeClientek açıklama eklenmiş olan @FeignClientFeign, bu arabirimi uygulayan çalışma zamanı proxy sınıfı oluşturur. Bazı Spring bileşenleri tipte fasulyeyi otomatik bağlamaya çalıştığında SomeClient, Fikir SomeClient, projede gerçek bir sınıf bulunmadığından ve Fikir'in anlaşılması öğretilmediğinden, hiçbir tür fasulye bulunmadığından şikayet eder.@FeignClient ek açıklamaları herhangi bir şekilde .

Çözüm: Not Ekle arayüzü SomeClientile @Component. (Bizim durumumuzda, doğrudan @FeignClientek açıklama SomeClientkullanmıyoruz @OurProjectFeignClient, ek açıklama eklenmiş metaannotation kullanıyoruz @FeignClientve @Componentbuna ek açıklama ekliyoruz .)


Evet, @Componentarayüze eklemek sorunu çözer. Ama bence bu doğru bir yol değil ... Bence bu IntelliJ IDEA'da bir hata ya da çok zor olmamak için IntelliJ IDEA yeni Feign sürümleri için hazır değil. Daha kötü @Componentfeign sürümleri olmadan çalışır ( @FeignClientek açıklamanın org.springframework.cloud.netflix.feignyerine nerede olduğu org.springframework.cloud.openfeign- belki de sorunun nedeni budur?). Bunun için daha fazla ayrıntı (belki bir hata bileti) buldunuz mu?
Josef Reichardt

Davam (olmadan işe yaramadı olsa hangi Hayır, değil var @Component) 'dir @FeignClientden org.springframework.cloud.netflix.feign) paketin.
Tomáš Záluský

3
JetBrains hata izci sorunu burada: youtrack.jetbrains.com/issue/IDEA-168155
Josef Reichardt


2

Ve önemli bilgilerin son bir parçası - ComponentScanböylece app tel gereken şeyler hakkında bilmek böylece ekleyin . Bu, bu soru için geçerli değildir. Ancak hiç bir @autowiringşey yapılmıyorsa, bu muhtemelen sizin çözümünüzdür.

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

Bu mantıklı ve benim için hile yaptı. Uyarıları neden kapatmalıyım? Uyarılar beklendiği gibi çalışmalıdır!
WebComer

2

Yapmanız gereken şey

@ComponentScan("package/include/your/annotation/component") içinde AppConfiguration.java.

AppConfiguraion.javaPaketinizin ek açıklama bileşeninizin (@Service, @Component ...) paketinden daha derin olduğunu düşündüğüm için ,

gibi "package/include/your/annotation/component/deeper/config".


@ComponentScan ("package.include.your.annotation.component")!
Iakov Senatov

2

Başvurumda da benzer bir sorun yaşadım. Ek açıklama eklediğimde yanlış vurgulama kayboldu.

@ContextConfiguration(classes = {...})

sadece test paketleri için!
Iakov Senatov

2

IntelliJ v.14'te göründüğünde bu hatayı gizlemek için bu ek açıklamayı kullanıyorum:

@SuppressWarnings("SpringJavaAutowiringInspection")

Bir kurucuya otomatik olarak bağlandığında@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Loren

2

Benim için çözüm @EnableAutoConfigurationUygulama sınıfına @SpringBootApplicationbunun altını çizeceği için yerleştirmekti. Onu silin ve eksik fasulye ile ilgili tüm uyarıları yok! Aptal Bahar ...


2

Benim durumumda, @Autowired için çalıştığım Dizin aynı düzeyde değildi,

aynı yapı seviyesinde kurduktan sonra hata kayboldu

bazı yardımcı olabilir umuyoruz!


1

Bahar önyükleme uygulamamdaki bu soruna çözümüm, bahar uygulama içeriğini açmak ve eksik otomatik kablolu fasulye için sınıfı manuel olarak eklemekti!

(Proje Yapısı menüsü veya yay aracı penceresi üzerinden erişim ... "Bahar Uygulaması Bağlamı" düzenle)

Yani sadece benim ApplicationApplication bahar yapılandırmasını içeren SpringApplicationContext yerine, aynı zamanda eksik Bean içerir:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

et voilà: Hata mesajı kayboldu!


1

Bu hala en son IntelliJ'de bir hata gibi görünüyor ve olası bir önbellekleme sorunuyla mı ilgili?

@Repository ek açıklamasını yukarıda belirtilen mk321 olarak eklerseniz, kaydedin, ardından ek açıklamayı kaldırın ve tekrar kaydedin, bu sorunu çözer.


1

Bu işi yapmak için tek yapmanız gereken aşağıdaki kod:

@ComponentScan
public class PriceWatchTest{

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

1

Ben sadece bunu çözmek için @EnableAutoConfiguration kullanmak zorunda kaldı, ancak bu hatanın hiçbir fonksiyonel etkisi yoktu.


1

Spring boot uygulama ana sınıfına @EnableAutoConfiguration yerleştirilerek çözülebilir.


0

Bazen - benim durumumda - nedeni yanlış bir ithalattır. Yanlışlıkla ithal ettim

import org.jvnet.hk2.annotations.Service

onun yerine

import org.springframework.stereotype.Service

Idea'nın önerilen ithalatında ilk tercihi körü körüne kabul ederek. Bana ilk kez birkaç dakika sürdü :-)


0

Şaşırtıcı bir şekilde, Eclipse ile başarılı bir şekilde yürütülen Feign odaklı bir proje InteliJ'de çalışamadı. Uygulama başlatıldığında InteliJ, serviceImpl katmanına enjekte etmeye çalıştığım Feign istemcisinden şikayet etti: field personRestClient (Feign istemcim) ... bulunamadı ... tür bir fasulye gerekli. Yapılandırmanızda '....' türünde bir fasulye tanımlamayı düşünün.

Neyin yanlış olduğunu anlamaya çalışmak için uzun zaman harcadım. Tamamen anlamadığım bir çözüm buldum (InteliJ için):

  1. Alt Shift F10 (veya çalıştırma menüsü)
  2. 'Yapılandırmayı düzenle'yi seçin
  3. Yapılandırma penceresinde, "Sağlanan" kapsamla bağımlılıkları içer "onay kutusunu işaretleyin
  4. Uygulamanızı çalıştırın

Veya Eclipse'i seçin :)


0

Fasulyenizin paketinin doğru yazılıp yazılmadığını kontrol edin

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


import ...

@Service
class ServiceX {

  ...

}


0

IDEA'ya mybatis eklentisini yükleyerek sorunu çözdüm. Mybatis Plugin'i kurduğumda kayboldu.


0

basit 2 adım yapmak zorunda

  1. hazırda bekletme çekirdeği derinliği ekle
  2. @Outowired değerini @Resource olarak değiştirin.
==>> change @Autowired to  @Resource

Cevabını açıkla.
mentallurg

0

IntelliJ IDEA Ultimate

Ana sınıfınızı IntelliJ Spring Uygulama Bağlamına ekleyin, örneğin Application.java

File -> Project Structure..

sol taraf: Proje Ayarı -> Modüller

sağ taraf: paket yapınızda bulun Springve ekleyin+ Application.java


UV cevabına eşittir
Anton Bondarenko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.