간단한 단위 테스트를 만들었지 만 IntelliJ가 빨간색으로 잘못 강조 표시합니다. 오류로 표시
콩이 없습니까?
아래에서 볼 수 있듯이 테스트를 통과합니까? 자동 배선이되어야합니까?
간단한 단위 테스트를 만들었지 만 IntelliJ가 빨간색으로 잘못 강조 표시합니다. 오류로 표시
콩이 없습니까?
아래에서 볼 수 있듯이 테스트를 통과합니까? 자동 배선이되어야합니까?
답변:
주석을 사용하여 Spring Boot 응용 프로그램을 만들 때 이와 동일한 문제가 발생했습니다 @SpringBootApplication
. 이 주석은 나타내고 @Configuration
, @EnableAutoConfiguration
그리고 @ComponentScan
받는 따른 스프링 참조 .
예상대로 새로운 주석이 제대로 작동하고 응용 프로그램이 원활하게 실행되었지만 Intellij 는 충족되지 않은 @Autowire
종속성 에 대해 계속 불평했습니다 . 마자 내가 사용으로 다시 변경으로 @Configuration
, @EnableAutoConfiguration
그리고 @ComponentScan
개별적으로, 오류가 정지했다. Intellij 14.0.3 (및 이전 버전도 가능)이 아직 @SpringBootApplication
주석 을 인식하도록 구성되지 않은 것 같습니다 .
지금까지 오류로 인해 많은 방해가된다면 세 가지 주석으로 되돌아갑니다. 그렇지 않으면 테스트가 통과되므로 Intellij를 무시 하십시오.
항상 기억해...
사람은 항상 기계보다 큽니다.
@SpringBootApplication
이 오류가 발생했습니다. 나는 scanBasePackages
매개 변수를 사용하여 @ Jaõs Matos의 조언을 따르고 @SpringBootApplication
스캔해야 할 패키지 / 네임 스페이스를 지정했습니다.
@Repository
저장소 클래스에 Spring 주석 을 추가하십시오 .
이 주석없이 작동해야한다는 것을 알고 있습니다. 그러나 이것을 추가하면 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
@ComponentScan이 구성 요소를 스캔해야하는 위치를 표시해야하는 경우가 있습니다. 패키지를이 주석의 매개 변수로 전달하면됩니다. 예 :
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
그러나 이미 언급했듯이 @SpringBootApplication 주석은 @ComponentScan을 대체하므로 이러한 경우 동일한 작업을 수행해야합니다.
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
적어도 제 경우에는 Intellij가 불평을 중단했습니다.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
에는 앱이 제대로 작동했지만 intellij는 마음에 들지 않았습니다. @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
나를 위해 고정으로 변경 !
나는 spring-boot 2.0을 사용하고 있으며 intellij 2018.1.1 Ultimate Edition과 같은 문제에 직면했습니다.
@EnableAutoConfiguration을 기본 응용 프로그램 클래스에 배치하여 해결했습니다.
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯ \ _ (ツ) _ / ¯
Bean 설정 파일에 @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
선택하십시오.
Spring Boot 응용 프로그램에서 비슷한 문제가 발생했습니다. 애플리케이션은 Feign (주석이있는 인터페이스의 요청을 합성하는 HTTP 클라이언트)을 사용합니다. 으로 인터페이스에 SomeClient
주석이 달린 @FeignClient
Feign은이 인터페이스를 구현하는 런타임 프록시 클래스를 생성합니다. 일부 Spring 컴포넌트가 bean 유형의 autowire를 시도하면 실제로 실제 클래스가 프로젝트에 존재하지 않으며 Idea가 주석 을 이해하도록 가르쳐지지 않기 때문에 Idea는 SomeClient
유형의 bean을 SomeClient
찾지 않습니다 @FeignClient
.
솔루션 :로 인터페이스 SomeClient
에 주석을 답니다 @Component
. (이 경우 직접 @FeignClient
주석을 사용하지 않고 주석을 달고 주석 을 추가 SomeClient
하는 메타 주석을 사용합니다.)@OurProjectFeignClient
@FeignClient
@Component
@Component
인터페이스에 추가 하면 문제가 해결됩니다. 그러나 나는 이것이 올바른 방법이 아니라고 생각합니다 ... 내 의견으로는 이것은 IntelliJ IDEA의 버그이거나 그렇게 어렵지 않습니다 IntelliJ IDEA는 최신 Feign 버전에 대한 준비가되어 있지 않습니다. 그것은 더 @Component
잘못된 feign 버전 없이 작동 합니다 ( @FeignClient
주석 org.springframework.cloud.netflix.feign
대신에 주석이있는 곳 org.springframework.cloud.openfeign
-아마도 이것이 문제의 원인입니까?). 이에 대한 추가 세부 정보 (버그 티켓 일 수 있음)를 찾았습니까?
@Component
)는 패키지 @FeignClient
에서 나온 것이지만 아닙니다 org.springframework.cloud.netflix.feign
.
당신이해야 할 일은 추가
@ComponentScan("package/include/your/annotation/component")
에서 AppConfiguration.java
.
나는 당신의 생각 때문에 AppConfiguraion.java
의 패키지가 깊은 당신의 주석 구성 요소에 비해 (@Service, @Component ...)의 패키지
와 같은 "package/include/your/annotation/component/deeper/config"
.
응용 프로그램에서 비슷한 문제가 발생했습니다. 주석을 추가하면 잘못된 강조 표시가 사라집니다.
@ContextConfiguration(classes = {...})
IntelliJ v.14에 나타날 때이 주석을 숨기려면이 주석을 사용하고 있습니다.
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
나를 위해 솔루션은 @EnableAutoConfiguration
Application 클래스에서 @SpringBootApplication
중복 때문에 밑줄을 긋는 아래 에 배치 해야했습니다. 그것을 삭제하고 누락 된 콩에 관한 모든 경고가 사라졌습니다! 바보 같은 봄 ...
스프링 부트 응용 프로그램 에서이 문제에 대한 나의 해결책은 스프링 응용 프로그램 컨텍스트를 열고 누락 된 자동 유선 Bean에 대한 클래스를 수동으로 추가하는 것입니다!
(프로젝트 구조 메뉴 또는 스프링 도구 창을 통해 액세스 ... "봄 애플리케이션 컨텍스트 편집")
따라서 내 ExampleApplication 스프링 구성 만 포함하는 SpringApplicationContext 대신 누락 된 Bean도 포함합니다.
SpringApplicationContext :
et voilà : 오류 메시지가 사라졌습니다!
때때로-내 경우에는-그 이유는 잘못된 수입입니다. 실수로 가져 왔습니다
import org.jvnet.hk2.annotations.Service
대신에
import org.springframework.stereotype.Service
Idea의 제안 된 수입품 중 첫 번째 선택을 맹목적으로 받아들임. 처음 일어 났을 때 몇 분이 걸렸습니다. :-)
놀랍게도 Eclipse를 성공적으로 실행 한 Feign 지향 프로젝트는 InteliJ에서 실행할 수 없었습니다. 응용 프로그램을 시작할 때 InteliJ는 serviceImpl 계층에 주입하려고 시도한 Feign 클라이언트에 대해 다음과 같이 불평했습니다. 구성에서 '....'유형의 Bean을 정의하십시오.
나는 무엇이 잘못되었는지 이해하려고 오랜 시간을 낭비했다. 완전히 이해하지 못하는 솔루션 (InteliJ 용)을 찾았습니다.
또는 이클립스를 선택하십시오 :)
테스트 클래스에는 @AutoConfigureMockMvc를 사용하십시오.
간단하게 2 단계를 수행해야합니다
==>> change @Autowired to @Resource
IntelliJ IDEA Ultimate
기본 클래스를 IntelliJ Spring Application Context에 추가하십시오 (예 : Application.java).
File
-> Project Structure..
왼쪽 : 프로젝트 설정-> 모듈
오른쪽 : 패키지 구조에서 찾아
Spring
추가+
Application.java