2016-12-10 26 views
1

私は別の外部JARで動作するSpringBootアプリケーションを持っています。 JARから@Autowiredクラスにしようとすると、SpringAppがロードされません。私は "org.springframework.beans.factory.NoSuchBeanDefinitionException"を取得しました。私はこれがSpringBootのプロジェクトクラスの場所を検索しないことと関係があることを知っていますが、どこを正しく表示するかを正しく理解する方法を理解することはできません。 @ComponentScanを追加しました。これは他の内部クラスで動作しましたが、このExternal JARでは動作しませんでした。SpringBoot外部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に指示する方法を見つけることができません。

エラーは、「フィールドをautowireできませんでした:プライベートar.com.tr.arz.expurgo.services.ClasificacionService」である

私も@ComponentScan初期クラスの外部JARのクラスを追加しようとしましたが、それも動作しませんでした。

提案がありますか?

+0

InitクラスのComponentScanにパッケージを追加します。 ArzServiceImplはコンポーネントなので、設定を含んではいけません。 – dunni

+0

JARはクラスパス上で利用可能ですか?また、 '@ ComponentScan'は' Init 'クラスになければなりません – developer

答えて

0

私はそれを解決できました。 まず、@Serviceから@ComponentScanを削除し、Init.javaクラス(アプリケーションの開始)で呼び出すだけです 次に、jarクラスの上位レベルになるようにInitパッケージを変更しました:

私のInit.javaはパッケージar.com.tr.latam.careの下にあり、外部JARパッケージのクラスはpackage ar.com.tr.expurgoの下にありました。そこで、私はInit.javaをパッケージar.com.trに変更しました。

関連する問題