SpringBoot:我可以使用java -cp从JAR提供的runnable JAR中@Autowire Bean吗?

时间:2017-03-19 18:31:00

标签: java spring spring-boot jar autowired

我有可运行的JAR A,其中包含interface:

[0, 0, 0]

在JAR A中我也有一个类试图自动装配FooInterface implmenetation:

interface FooInterface {
    void foo();
    ...
}

在其他项目B中,我将jar A作为外部库并实现了FooInterface:

class Other{
    @Autowired 
    FooInterface fooInterfaceImplementation;
    ...
}

我尝试使用命令运行带有JAR B类的可运行A JAR:

@Component
class BarClass implements FooInterface {
    void foo(){...}
    ...
}

但它以以下例外结束:

java -jar A.jar -cp B.jar

是否有可能以这种方式自动装配所需的bean?

任何帮助高度赞赏。

2 个答案:

答案 0 :(得分:1)

是的,为了从类路径JAR文件中检测/扫描bean,您需要使用类级别注释@ComponentScan(basePackages="com.ocado")将包添加到Spring启动启动器类。

答案 1 :(得分:1)

如果您尝试同时使用-jar-cp,则无法进行此操作。使用-cp时会忽略-jar

如果你想在类路径上有多个jar,你可以使用-cp传递它们。然后,您还必须提供要启动的主类的名称。鉴于您似乎使用的是Spring Boot,可能如下所示:

java -cp A.jar:B.jar org.springframework.boot.loader.JarLauncher

你可能也对Spring Boot的PropertiesLauncher感兴趣,它允许你创建一个带有可配置类路径的可执行jar。