外部JAR

时间:2016-12-10 08:44:56

标签: java spring spring-boot

我有一个与另一个外部JAR一起使用的SpringBoot应用程序。当我尝试从JAR中获取@Autowired类时,SpringApp无法加载。我得到了" org.springframework.beans.factory.NoSuchBeanDefinitionException"。我知道这与SpringBoot有关,而不是搜索项目类的位置,但我无法弄清楚如何正确地告诉我们在哪里看。我已经添加了@ComponentScan,它可以与其他内部类一起使用,但不能使用此外部JAR。

这是我使用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检查那些文件。

错误是"无法自动装配字段:private ar.com.tr.arz.expurgo.services.ClasificacionService"

我也尝试在@ComponentScan Init类中添加外部JAR类,但它也没有用。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我能够解决它。 首先,我从@Service中删除@ComponentScan,并仅在我的Init.java类中调用它(应用程序的开始) 然后我将我的Init包更改为jar类的上层:

我的Init.java位于包ar.com.tr.latam.care下,外部JAR包类位于:package ar.com.tr.expurgo。所以,我将我的Init.java更改为包ar.com.tr,并且每个都工作了!