NoSuchBeanDefinitionException: нет подходящего компонента типа 'java.util.List' - PullRequest
0 голосов
/ 28 мая 2019

В настоящее время я пытаюсь создать приложение Spring Shell в Scala. Он работает в IntelliJ, но не работает при создании баночки.

У меня есть рабочее доказательство концепции в 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.

Редактировать: я загрузил минимальный пример: https://github.com/Zethson/Scala-Spring-Shell-Example/tree/feature/minimal_scala_issues_SO

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Кажется, что невозможно разрешить параметры вашей команды оболочки.Можете ли вы попробовать это:

@ShellComponent class MyCommands {
  @ShellMethod("Add two integers together.") def add(
    @ShellOption(mandatory = true) a: Int, 
    @ShellOption(mandatory = true) b: Int): Int = a + b
}
0 голосов
/ 28 мая 2019
  1. Неважно, по какому пути вы разместили свой компонент (Бин), если вы сначала используете компонентное сканирование, он проверит его в текущем пакете, а затем в его подпакетах. Если ваш компонент размещен по другому пути, включите путь в @ ComponentScan («Путь»)

  2. Также обязательно проверьте после применения режима DEBUG в application.properties в java для Spring Boot, сканируется ли ваш компонент или нет, если не пытаетесь использовать @ Component чуть выше компонента, где бы он ни находился, поскольку @ SpringBootApplication сканирует то же самое при запуске.

Если я ответил неправильно, дайте мне знать ваш ответ и уточните подробнее. Happy Coding:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...