intellij nói không chính xác không tìm thấy loại đậu nào cho kho lưu trữ tự động


138

Tôi đã tạo một bài kiểm tra đơn vị đơn giản nhưng IntelliJ không chính xác làm nổi bật nó màu đỏ. đánh dấu nó là một lỗi

Không có đậu?

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy dưới đây nó vượt qua bài kiểm tra? Vậy nó phải là Autowired?

nhập mô tả hình ảnh ở đây


3
IntelliJ đôi khi đưa ra lỗi tự động dương tính giả. Ví dụ: trong các ứng dụng Spring Boot, nơi có rất nhiều cấu hình được ẩn đằng sau EnableAutoConfiguration. Có một vấn đề mở cho điều đó. Nguyên nhân khác có thể được cấu hình không chính xác khía cạnh mùa xuân. Những gì tôi thường làm trong những tình huống này là hạ thấp mức độ nghiêm trọng của việc kiểm tra để nó bớt gây khó chịu ...
Bohuslav Burghardt

Câu trả lời:


176

Tôi gặp vấn đề tương tự khi tạo ứng dụng Spring Boot bằng cách sử dụng @SpringBootApplicationchú thích của họ . Chú thích này đại diện @Configuration, @EnableAutoConfiguration@ComponentScantheo tài liệu tham khảo mùa xuân .

Đúng như dự đoán, chú thích mới hoạt động tốt và ứng dụng của tôi chạy trơn tru, nhưng Intellij cứ phàn nàn về @Autowiresự phụ thuộc chưa hoàn thành . Ngay sau khi tôi thay đổi lại để sử dụng @Configuration, @EnableAutoConfiguration@ComponentScanriêng biệt, các lỗi chấm dứt. Có vẻ như Intellij 14.0.3 (và rất có thể, các phiên bản trước đó cũng vậy) chưa được cấu hình để nhận ra @SpringBootApplicationchú thích.

Hiện tại, nếu các lỗi làm phiền bạn nhiều như vậy, thì hãy quay lại ba chú thích riêng biệt đó. Mặt khác, bỏ qua Intellij ... độ phân giải phụ thuộc của bạn được cấu hình chính xác, vì thử nghiệm của bạn vượt qua.

Luôn luôn ghi nhớ...

Con người luôn vĩ đại hơn máy móc.


1
Sự cố đã được khắc phục ngay bây giờ với các phiên bản mới hơn của Intellij (đã được kiểm tra vào năm 2017.1)
Sourabh

44
Tôi vẫn đang nhận được nó với 2017.2, và nó được trả cho giấy phép cuối cùng.
Thomas Carlisle

1
Tôi sẽ nhận được nó với lớp bên ngoài 2017.2 và SprintBootTest và lớp bên trong tĩnh SpringBootApplication theo ví dụ thử nghiệm Spring Cloud Stream: docs.spring.io/spring-cloud-stream/docs/cản/reference/html/ tựa
danebez

4
Đối với các phiên bản mới hơn của IntelliJ (ví dụ 2017), bạn phải kích hoạt plugin Spring Data và sau đó bạn không cần bất kỳ cách giải quyết nào ở trên. Có một câu trả lời khác dưới đây cho bạn biết làm thế nào để làm điều đó.
Norbert

4
Với IntelliJ 2018.2, sử dụng Spring Boot 2.0.5 và @SpringBootApplicationtôi đã nhận được lỗi này. Tôi đã làm theo lời khuyên của @ Jaõs Matos bằng cách sử dụng scanBasePackagestham số @SpringBootApplicationvà chỉ định gói / không gian tên cần được quét.
Dave Goodchild

53

Thêm chú thích mùa xuân @Repositorytrên lớp kho lưu trữ.

Tôi biết nó nên hoạt động mà không có chú thích này. Nhưng nếu bạn thêm cái này, IntelliJ sẽ không hiển thị lỗi.

@Repository
public interface YourRepository ...
...

Nếu bạn sử dụng Spring Data với Repositorylớp mở rộng thì đó sẽ là mâu thuẫn. Sau đó, bạn phải chỉ ra các trang thám hiểm.

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

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

Và tiếp theo bạn có thể tự động lưu trữ kho lưu trữ của mình mà không gặp lỗi.

@Autowired
YourRepository yourRepository;

Nó có thể không phải là một giải pháp tốt (tôi đoán bạn đang cố gắng đăng ký repositorium hai lần). Nhưng làm việc cho tôi và không hiển thị lỗi.

Có thể trong phiên bản mới của IntelliJ có thể được sửa: https://youtrack.jetbrains.com/su/IDEA-137023


3
Theo điều này youtrack.jetbrains.com/su/IDEA-148113, nó đã được sửa trong phiên bản 16 ... (nín thở)
ismoore999

@Component dường như cũng hoạt động. Có vẻ như người ta chỉ cần buộc giao diện / lớp được quét
Brett

Bạn không cần thêm @Rep repository nữa. Chỉ cần trên plugin Spring Data.
Shin Kim

3
Ba năm sau và nó lại bị phá vỡ
garyM

Tôi đã sử dụng / @ Mapper cho giao diện mapper của tôi (mybatis). IDEA ném cảnh báo này. Tôi đã thay đổi nó thành / @ Kho lưu trữ cảnh báo biến mất.
bzuo

32

Phiên bản IntelliJ IDEA Ultimate của tôi (2016.3.4 Build 163) dường như hỗ trợ điều này. Mẹo nhỏ là bạn cần kích hoạt plugin Spring Data.

nhập mô tả hình ảnh ở đây


Điều này cũng đã khắc phục vấn đề cho tôi - Có vẻ như đây có thể là vấn đề thực sự cho bất kỳ ai có cài đặt mã chính xác!
Matsu Q.

5
Không hoạt động trong năm 2017.2.7. Plugin được kích hoạt, nhưng cảnh báo vẫn còn.
đóng băng não

Đã làm việc cho tôi trong iJ Ultimate 2018.2.5.
JL_SO

23

Đôi khi bạn được yêu cầu chỉ ra nơi @ComponentScan nên quét các thành phần. Bạn có thể làm như vậy bằng cách chuyển các gói làm tham số của chú thích này, ví dụ:

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

Tuy nhiên, như đã đề cập, chú thích @SpringBootApplication thay thế @ComponentScan, do đó trong những trường hợp như vậy, bạn phải làm như vậy:

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

Ít nhất trong trường hợp của tôi, Intellij ngừng phàn nàn.


2
Đây chắc chắn là giải pháp tốt hơn, sạch hơn và có thể xác nhận rằng điều này đã loại bỏ cảnh báo. Cảm ơn!
Dave Goodchild

2
Trong trường hợp của tôi, tôi đã có @SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) và mặc dù ứng dụng hoạt động tốt, intellij không thích nó. Thay đổi thành @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})cố định cho tôi!
GriffoGoes

1
Đây là giải pháp tốt nhất vì nó có thể di chuyển giữa các IDE và truyền đạt rõ ràng ý định của nhà phát triển.
MusikPolice 18/03/19

Tôi đang sử dụng boot mùa xuân 2019.3.1 cuối cùng 2.2.1 và java 11.0.4. Vấn đề vẫn tồn tại trong các tập tin thử nghiệm đơn vị.
garyM

1
những gì @GriffoGoes đề xuất đã khắc phục vấn đề của tôi, vì tôi đang sử dụng một cấu trúc đa mô-đun, đó là giải pháp tốt nhất của tôi
Juan Monsalve

20

Tôi luôn giải quyết vấn đề này khi thực hiện theo .. Cài đặt> Kiểm tra> Lõi mùa xuân> Mã hơn bạn chuyển từ lỗi sang cảnh báo tùy chọn mức độ nghiêm trọng

nhập mô tả hình ảnh ở đây


2
Tôi đã thực hiện giải pháp này cho đến khi sửa lỗi được thực hiện vào Mùa xuân: youtrack.jetbrains.com/su/IDEA-182912
Garry Polley

15

Tôi đang sử dụng spring-boot 2.0, và phiên bản cuối cùng của intellij 2018.1.1 và tôi gặp phải vấn đề tương tự.

Tôi đã giải quyết bằng cách đặt @EnableAutoConfiguration trong lớp ứng dụng chính

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

13
Điều này cũng "hoạt động" đối với tôi, nhưng sau đó intellij phàn nàn: Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration \ _ (ツ) _ /
Michael

6

Kiểm tra xem bạn có bỏ sót chú thích @Service trong lớp dịch vụ của mình không, đó là trường hợp của tôi.


5

Đặt @Componenthoặc @configurationtrong tập tin cấu hình bean của bạn dường như hoạt động, tức là một cái gì đó như:

@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

Nếu bạn không muốn thực hiện bất kỳ thay đổi nào đối với mã của bạn chỉ để làm cho IDE của bạn hài lòng. Tôi đã giải quyết nó bằng cách thêm tất cả các thành phần vào khía cạnh Spring.

  1. Tạo một nhóm có tên "Dịch vụ, Bộ xử lý và Bộ định tuyến" hoặc bất kỳ tên nào bạn thích;
  2. Xóa và tạo lại "Bối cảnh ứng dụng mùa xuân" sử dụng nhóm bạn đã tạo trước đây làm cha mẹ.

nhập mô tả hình ảnh ở đây


4

Miễn là các bài kiểm tra của bạn vượt qua bạn là tốt, hãy nhấn alt + enterbằng cách đưa con trỏ qua lỗi và bên trong menu con của mục đầu tiên bạn sẽ tìm thấy Disable Inspectionchọn


Cảm ơn. Nhân tiện, có cách nào để xem tất cả các thay đổi được thực hiện không mặc định trong một chế độ xem trong Cài đặt IntelliJ (để bạn biết những gì bạn đã thay đổi)?
bột366

3

Tôi gặp vấn đề tương tự trong ứng dụng Spring Boot. Ứng dụng sử dụng Fagger (các yêu cầu tổng hợp ứng dụng khách HTTP từ các giao diện được chú thích). Có giao diện được SomeClientchú thích @FeignClient, Feign tạo lớp proxy thời gian chạy thực hiện giao diện này. Khi một số thành phần Spring cố gắng tự động loại đậu SomeClient, Idea phàn nàn không SomeClienttìm thấy loại đậu nào vì không có lớp thực sự tồn tại trong dự án và Idea không được dạy để hiểu @FeignClientchú thích theo bất kỳ cách nào.

Giải pháp: chú thích giao diện SomeClientvới @Component. (Trong trường hợp của chúng tôi, chúng tôi không sử dụng @FeignClientchú thích SomeClienttrực tiếp, chúng tôi sử dụng metaannotation @OurProjectFeignClientđược chú thích @FeignClientvà thêm @Componentchú thích vào nó cũng hoạt động.)


Có, thêm @Componentvào giao diện giải quyết vấn đề. Nhưng tôi nghĩ rằng đây không phải là cách chính xác ... Theo tôi đây là một lỗi trong IntelliJ IDEA hoặc không quá khó IntelliJ IDEA chưa sẵn sàng cho các phiên bản Fagger mới hơn. Nó hoạt động mà không có @Componenttrong các phiên bản giả tưởng trước đó (trong đó @FeignClientchú thích org.springframework.cloud.netflix.feignthay vì org.springframework.cloud.openfeign- có lẽ đây là nguyên nhân của vấn đề?). Bạn đã tìm thấy bất kỳ chi tiết nào nữa (có thể là một vé lỗi) cho điều này?
Josef Reichardt

Không, tôi không, mặc dù trường hợp của tôi (không hoạt động mà không có @Component) là @FeignClienttừ org.springframework.cloud.netflix.feigngói.
Tomáš Záluský

3
Vấn đề tại trình theo dõi lỗi JetBrains có tại đây: youtrack.jetbrains.com/su/IDEA-168155
Josef Reichardt


2

Và một thông tin quan trọng cuối cùng - hãy thêm ComponentScanđể ứng dụng biết về những thứ cần thiết để kết nối. Điều này không liên quan trong trường hợp của câu hỏi này. Tuy nhiên nếu không @autowiringđược thực hiện ở tất cả thì đây có thể là giải pháp của bạn.

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

Điều này có ý nghĩa và đã lừa tôi. Tại sao tắt cảnh báo? Các cảnh báo sẽ làm việc như mong đợi!
WebCome

2

Những gì bạn cần làm là thêm

@ComponentScan("package/include/your/annotation/component") trong AppConfiguration.java.

Vì tôi nghĩ AppConfiguraion.javagói của bạn sâu hơn thành phần chú thích của bạn (@Service, @Component ...) của gói,

chẳng hạn như "package/include/your/annotation/component/deeper/config".


@ComponentScan ("gói.include.your.annotation.component")!
Iakov Senatov

2

Tôi đã có một vấn đề tương tự trong ứng dụng của tôi. Khi tôi thêm chú thích không chính xác highlites biến mất.

@ContextConfiguration(classes = {...})

Chỉ dành cho gói thử nghiệm!
Iakov Senatov

2

Tôi đang sử dụng chú thích này để ẩn lỗi này khi nó xuất hiện trong IntelliJ v.14:

@SuppressWarnings("SpringJavaAutowiringInspection")

Khi được cấp phép vào một nhà xây dựng, đó là@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Loren

2

Đối với tôi, giải pháp là đặt @EnableAutoConfigurationvào lớp Ứng dụng theo @SpringBootApplicationcách gạch chân nó vì nó dư thừa. Xóa nó và voila tất cả các bạn cảnh báo về đậu bị mất đã biến mất! Mùa xuân ngớ ngẩn ...


2

trong trường hợp của tôi, Thư mục tôi đang cố gắng @Autowired không ở cùng cấp độ,

Sau khi thiết lập nó ở cùng cấp cấu trúc, lỗi đã biến mất

hy vọng nó có thể giúp một số người!


1

Giải pháp của tôi cho vấn đề này trong ứng dụng khởi động mùa xuân của tôi là mở bối cảnh ứng dụng mùa xuân và thêm lớp cho đậu tự động bị thiếu bằng tay!

(truy cập qua menu Cấu trúc dự án hoặc cửa sổ công cụ mùa xuân ... chỉnh sửa "Bối cảnh ứng dụng mùa xuân")

Vì vậy, thay vì SpringApplicationContext chỉ chứa cấu hình mùa xuân exampleApplication của tôi, nó cũng chứa Bean bị thiếu:

SpringApplicationContext:

  • Ví dụApplication.java
  • MissingBeanClass.java

et voilà: Thông báo lỗi biến mất!


1

Đây dường như vẫn là một lỗi trong IntelliJ mới nhất và có liên quan đến vấn đề bộ nhớ đệm có thể xảy ra?

Nếu bạn thêm chú thích @Rep repository như mk321 đã đề cập ở trên, hãy lưu, sau đó xóa chú thích và lưu lại, điều này sẽ khắc phục vấn đề.


1

Tất cả những gì bạn cần làm để thực hiện công việc này là đoạn mã sau:

@ComponentScan
public class PriceWatchTest{

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

1

Tôi chỉ phải sử dụng @EnableAutoConfiguration để giải quyết nó, tuy nhiên lỗi này không có tác động chức năng.


1

Nó có thể được giải quyết bằng cách đặt @EnableAutoConfiguration trên lớp chính của ứng dụng khởi động mùa xuân.


0

Đôi khi - trong trường hợp của tôi là - lý do là nhập sai. Tôi vô tình nhập

import org.jvnet.hk2.annotations.Service

thay vì

import org.springframework.stereotype.Service

bằng cách chấp nhận một cách mù quáng sự lựa chọn đầu tiên trong hàng nhập khẩu được đề xuất của Idea. Mất vài phút khi lần đầu tiên xảy ra :-)


0

Đáng ngạc nhiên, một dự án định hướng Fict chạy thành công với Eclipse không thể chạy trong InteliJ. Khi khởi động ứng dụng, InteliJ đã phàn nàn về ứng dụng khách Fict mà tôi đã cố gắng tiêm vào lớp serviceImpl với nội dung: field personRestClient (ứng dụng khách Fict của tôi) trong ... yêu cầu một loại đậu ... không thể tìm thấy. Xem xét việc xác định một loại đậu '....' trong cấu hình của bạn.

Tôi đã lãng phí một thời gian dài để cố gắng hiểu những gì là sai. Tôi đã tìm thấy một giải pháp (cho InteliJ) mà tôi hoàn toàn không hiểu:

  1. Alt Shift F10 (hoặc chạy menu)
  2. Chọn 'Chỉnh sửa cấu hình'
  3. Trong cửa sổ cấu hình, chọn hộp kiểm 'bao gồm các phụ thuộc với phạm vi "Được cung cấp"
  4. Chạy ứng dụng của bạn

Hoặc chọn Eclipse :)


0

Kiểm tra xem gói đậu của bạn có được viết đúng không

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


import ...

@Service
class ServiceX {

  ...

}


0

Tôi đã giải quyết vấn đề bằng cách cài đặt plugin mybatis trong IDEA. Khi tôi cài đặt Mybatis Plugin, nó biến mất.


0

đơn giản bạn phải làm 2 bước

  1. thêm sự suy giảm hibernate-core
  2. thay đổi @Autowired thành @Resource.
==>> change @Autowired to  @Resource

Giải thich câu trả lơi của bạn.
mentallurg

0

IntelliJ IDEA Cuối cùng

Thêm lớp chính của bạn vào Bối cảnh ứng dụng mùa xuân của IntelliJ, ví dụ Application.java

File -> Project Structure..

bên trái: Cài đặt dự án -> Mô-đun

bên phải: tìm trong cấu trúc gói của bạn Springvà thêm+ Application.java


Nó tương đương với câu trả lời UV
Anton Bondarenko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.