我目前正在尝试在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
答案 0 :(得分:0)
如果首先使用组件扫描,则将组件(Bean)放置在哪个路径都没有关系,它将首先在当前程序包中检查它,然后再检查其子程序包。如果您的组件位于其他路径,则将该路径包括在 @ComponentScan(“ Path”)
还请确保在Java的 application.properties 中为Spring Boot应用DEBUG模式后检查是否正在扫描组件,如果没有尝试使用 @Component < / strong>放在组件上方的任何位置,因为 @SpringBootApplication 在启动时会进行扫描。
如果我回答不正确,请让我知道您的答复并进一步阐述。 快乐编码:)
答案 1 :(得分:0)
似乎无法解析您的Shell命令参数。你可以试试这个吗?
propagate