NoSuchBeanDefinitionException:没有类型为'java.util.List <org.springframework.shell.parameterresolver>'的合格bean

时间:2019-05-28 14:34:31

标签: java spring scala shell spring-boot

我目前正在尝试在Scala中创建一个Spring Shell应用程序。 它可以在IntelliJ中使用,但是在创建jar时不起作用。

我有一个使用Java的有效概念证明,它也成功创建了一个运行中的jar。

但是,我的Scala版本因以下几种而失败:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'parameterValidationExceptionResultHandler': Unsatisfied dependency expressed through field 'parameterResolvers'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.List<org.springframework.shell.ParameterResolver>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我尝试了几个最小的示例,将类(相同的程序包)和不同的Spring注释(如@SpringBootApplication都用于)移动。

Java版本:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@ShellComponent
public class MyCommands {

    @ShellMethod("Add two integers together.")
    public int add(int a, int b) {
        return a + b;
    }
}

Scala版本:

@EnableAutoConfiguration
@ComponentScan
class DemoApplication

object Scark extends App {
  SpringApplication.run(classOf[DemoApplication], args:_*)
}

@ShellComponent class MyCommands {
  @ShellMethod("Add two integers together.") def add(a: Int, b: Int): Int = a + b
}

我希望也能够从Scala版本成功构建一个jar。

编辑:我已经上传了最小的示例: https://github.com/Zethson/Scala-Spring-Shell-Example/tree/feature/minimal_scala_issues_SO

2 个答案:

答案 0 :(得分:0)

  1. 如果首先使用组件扫描,则将组件(Bean)放置在哪个路径都没有关系,它将首先在当前程序包中检查它,然后再检查其子程序包。如果您的组件位于其他路径,则将该路径包括在 @ComponentScan(“ Path”)

  2. 还请确保在Java的 application.properties 中为Spring Boot应用DEBUG模式后检查是否正在扫描组件,如果没有尝试使用 @Component < / strong>放在组件上方的任何位置,因为 @SpringBootApplication 在启动时会进行扫描。

如果我回答不正确,请让我知道您的答复并进一步阐述。 快乐编码:)

答案 1 :(得分:0)

似乎无法解析您的Shell命令参数。你可以试试这个吗?

propagate