2016-12-10 5 views
1

나는 다른 외부 JAR과 동작하는 SpringBoot Application을 가지고있다. JAR에서 @Autowired 클래스를 시도하면 SpringApp이로드되지 않습니다. "org.springframework.beans.factory.NoSuchBeanDefinitionException"이 있습니다. 이것이 SpringBoot가 프로젝트 클래스가 어디에 있는지 검색하지 않는 것과 관련이 있다는 것을 알고 있지만, 어떻게 보일지 정확하게 알려주는 방법을 알 수는 없습니다. @ComponentScan을 추가했습니다.이 클래스는 다른 내부 클래스와 함께 작동하지만이 외부 JAR에서는 작동하지 않습니다. SpringBoot 외부 JAR로부터의 Autowired 예외

내가 JAR 방법을 사용하는 클래스입니다 :

package ar.com.tr.latam.care.ws.service.impl; 

@Configuration 

@ComponentScan({ 
"ar.com.tr.arz.expurgo", "ar.com.tr.arz.expurgo.logger", "ar.com.tr.arz.expurgo.logger.dao", "ar.com.tr.arz.expurgo.logger.impl","ar.com.tr.arz.expurgo.logger.model"}) 

@Import({ AppConfig.class, AplicacionCriteriosExpurgoServiceImpl.class, ClasificacionServiceImpl.class, ExcelReaderServiceImpl.class, ConversionServiceImpl.class}) 

@Service 
public class ArzServiceImpl implements ArzService { 

@Autowired 
private ExcelReaderService excelReaderService; 

@Autowired 
private ConversionService conversionService; 

@Autowired 
private AppConfig appConfig; 

... 
} 

그리고 내 Init.java 클래스 :

package ar.com.tr.latam.care; 
@Configuration 
@ComponentScan({ "ar.com.tr.latam.care.controller", 
"ar.com.tr.latam.care.filtro", "ar.com.tr.latam.care", 
"ar.com.tr.latam.care.model.log", "ar.com.tr.latam.care.logger.impl", }) 

@EnableJpaRepositories 
@SpringBootApplication 

public class Init extends SpringBootServletInitializer { 


@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder  application) { 
    return application.sources(Init.class); 
} 

/** 
* Main method. 
* 
* @param args String[]. 
* @throws Exception Exception. 
*/ 
public static void main(String[] args) throws Exception { 
    SpringApplication.run(Init.class, args); 
} 
} 

의 JAR 구조 "ar.com.tr.arz로 시작합니다. expurgo ",하지만 난 그 파일을 확인하기 위해 Springboot에게 적절하게 알려주는 방법을 찾을 수 없습니다. 나는 또한 @ComponentScan 초기화 클래스에서 외부 JAR 클래스를 추가하려고했습니다

:하지만,

오류는 "개인 ar.com.tr.arz.expurgo.services.ClasificacionService을 필드를 autowire하기 수 없습니다" 그것은 또한 작동하지 않았다.

제안 사항?

+0

Init 클래스의 ComponentScan에 패키지를 추가하십시오. ArzServiceImpl은 구성 요소이므로 구성을 포함해서는 안됩니다. – dunni

+0

클래스 경로에서 JAR을 사용할 수 있습니까? 또한'@ ComponentScan'은'Init'클래스에 있어야합니다. – developer

답변

0

나는 그것을 풀 수 있었다. 먼저 @Service에서 @ComponentScan을 제거하고 Init.java 클래스 (응용 프로그램 시작)에서 호출합니다. 다음은 초기 초기화 패키지 순서가 jar 클래스의 상위 수준이되도록 변경했습니다.

My Init.java가 ar.com.tr.latam.care 패키지에 있었고 External JAR 패키지 클래스가 package ar.com.tr.expurgo 아래에있었습니다. 그래서, Init.java가 ar.com.tr 패키지에 포함되도록 변경했습니다.

관련 문제