2016-12-10 6 views
1

Ich habe eine SpringBoot-Anwendung, die mit einem anderen externen JAR funktioniert. Wenn ich @Autowired-Klassen aus der JAR-Klasse versuche, kann die SpringApp nicht geladen werden. Ich habe "org.springframework.beans.factory.NoSuchBeanDefinitionException". Ich weiß, das hat damit zu tun, dass SpringBoot nicht sucht, wo die Projektklassen sind, aber ich kann nicht herausfinden, wie ich richtig sagen soll, wo ich suchen soll. Ich habe @ComponentScan hinzugefügt, es funktionierte mit anderen internen Klassen, aber nicht mit dieser externen JAR.SpringBoot Autowired Ausnahme von externen JAR

Dies ist die Klasse, wo ich die JAR-Methoden verwenden:

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; 

... 
} 

Und meine Init.java Klasse:

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); 
} 
} 

Die JAR-Struktur beginnt mit „ar.com.tr.arz. expurgo ", aber ich kann nicht herausfinden, wie ich Springboot richtig befehle, dort nach diesen Dateien zu suchen.

Der Fehler ist "Could not Feld autowire: privat ar.com.tr.arz.expurgo.services.ClasificacionService"

ich auch die externen JAR-Klassen in der @ComponentScan Init-Klasse hinzugefügt habe versucht, aber Es hat auch nicht funktioniert.

Irgendwelche Vorschläge?

+0

Fügen Sie die Pakete dem ComponentScan in Ihrer Init-Klasse hinzu. ArzServiceImpl ist eine Komponente und sollte daher keine Konfiguration enthalten. – dunni

+0

Ist das JAR im Klassenpfad verfügbar? Außerdem sollte '@ ComponentScan' in der' Init' Klasse sein – developer

Antwort

0

Ich konnte es lösen. Zuerst entferne ich die @ComponentScan vom @Service und nannte es nur in meiner Init.java Klasse (Start der Anwendung) dann änderte ich meinen Init packagein, um auf einer höheren Ebene der jar Klassen zu sein:

Mein Init.java war unter Paket ar.com.tr.latam.care, die externen JAR-Paketklassen waren unter: Paket ar.com.tr.expurgo. Also, ich habe meine Init.java in das Paket ar.com.tr geändert, und alles hat funktioniert!

Verwandte Themen