2017-07-25 1 views
0

私はプロジェクトでSpring Statemachineフレームワークを利用しようとしていますが、コンパイル時にビルドBeanの定義エラーが発生しています。Spring Statemachine FrameworkでbuildBeanDefinitionが失敗する

2017-07-25 16:37:25.462:WARN:oejd.DeploymentManager:Scanner-1: Unable to reach node goal: started 
java.lang.NoSuchMethodError: org.springframework.beans.factory.support.RootBeanDefinition.setTargetType(Lorg/springframework/core/ResolvableType;)V 
    at org.springframework.statemachine.config.configuration.StateMachineConfiguration.buildBeanDefinition(StateMachineConfiguration.java:109) 
    at org.springframework.statemachine.config.common.annotation.AbstractImportingAnnotationConfiguration.registerBeanDefinitions(AbstractImportingAnnotationConfiguration.java:92) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:352) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:333) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) 
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 

私はSpring MVCアプリケーションでstep 7と一緒に従います。私はSpringBootを使用していないが、私はサブファイルがないとは思わない。ここで

はStateMachineConfigファイルの私のコードです:

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.statemachine.config.EnableStateMachine; 
import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter; 
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer; 
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; 
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; 
import org.springframework.statemachine.listener.StateMachineListener; 
import org.springframework.statemachine.listener.StateMachineListenerAdapter; 
import org.springframework.statemachine.state.State; 

import java.util.EnumSet; 


@Configuration 
@EnableStateMachine 
public class StateMachineConfig 
     extends EnumStateMachineConfigurerAdapter<States, Events> { 

    @Override 
    public void configure(StateMachineConfigurationConfigurer<States, Events> config) 
      throws Exception { 
     config 
       .withConfiguration() 
       .autoStartup(true) 
       .listener(listener()); 
    } 

    @Override 
    public void configure(StateMachineStateConfigurer<States, Events> states) 
      throws Exception { 
     states 
       .withStates() 
       .initial(States.SI) 
       .states(EnumSet.allOf(States.class)); 
    } 

    @Override 
    public void configure(StateMachineTransitionConfigurer<States, Events> transitions) 
      throws Exception { 
     transitions 
       .withExternal() 
       .source(States.SI).target(States.S1).event(Events.E1) 
       .and() 
       .withExternal() 
       .source(States.S1).target(States.S2).event(Events.E2); 
    } 

    @Bean 
    public StateMachineListener<States, Events> listener() { 
     return new StateMachineListenerAdapter<States, Events>() { 
      @Override 
      public void stateChanged(State<States, Events> from, State<States, Events> to) { 
       System.out.println("State change to " + to.getId()); 
      } 
     }; 
    } 
} 

これは私が注意してください(でステートマシンを使用しようとしていますコントローラである:私はIntelliJのようステートマシンのインスタンス化上記@Autowiredタグを削除しました

@Controller 
@RequestMapping("/") 
public class HomeController { 

    private StateMachine<States, Events> stateMachine; 

    @RequestMapping(method = RequestMethod.GET) 
    public String index() { 
      stateMachine.sendEvent(Events.E1); 
      return "redirect:/target/list"; 
    } 
} 

答えて

2

NoSuchMethodErrorコアクラスを春にするポイントは、フレームワークのバージョンの重複が整理があることを意味する場合:?。)これは私の問題の犯人かもしれ「が見つかり 『ステートマシン』タイプのいかなる豆を」と言っていないまま。あなたはおそらくstatemachine pomにいくつかのバージョンを解決させて、自分のビルドは何か他のものを追加します。

あなたのmavenまたはgradleビルドファイルは、コアフレームワークのJARファイルのバージョンが異なる理由を示しています。 bootを使用している場合、正しいバージョンが得られます。手動でバージョンを管理する必要はありません。

+0

これは意味があります。 statemachineで使用する必要があるjarのバージョンを知る方法はありますか?私のプロジェクトはコンパイルされていて以前に実行されていましたが、私はPOMファイルのspring-statemachine-core依存性だけでなく、既存のコードベースに上記のコードを追加しました。 – A21

+0

ありがとう、これは助けました。 3.2.5.RELEASEから4.2.3.RELEASEへ、いくつかの主要な春のフレームワークのための私の既存のPOMバージョンをアップグレードしました。 – A21

関連する問題