簡體   English   中英

SpringBoot:我可以在使用Java -cp提供的JAR中從可運行的JAR中@Autowire Bean嗎?

[英]SpringBoot: Can I @Autowire Bean in runnable JAR from JAR provided using java -cp?

我有包含界面的可運行JAR A:

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

在JAR AI中,還有一個類試圖自動裝配FooInterface實現:

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

在其他項目BI中,將jar A作為外部庫和FooInterface的實現:

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

我正在嘗試使用以下命令,使用JAR B中的類運行可運行的A JAR:

java -jar A.jar -cp B.jar

但這以以下異常結尾:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ocado.cfc.optimisation.AlgorithmInterface' available
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:348)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:335)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
        at com.ocado.cfc.optimisation.Executable.main(Executable.java:81)

是否可以通過這種方式自動連接所需的bean?

任何幫助,高度贊賞。

是的,為了讓Spring從類路徑JAR文件中檢測/掃描bean,您需要使用類級別注釋@ComponentScan(basePackages="com.ocado")將包添加到spring boot啟動器類中。

如果嘗試同時使用-jar-cp ,則不可能。 使用-jar-cp被忽略。

如果要在類路徑上有多個jar,可以使用-cp將它們都傳遞給它們。 然后,您還必須提供要啟動的主類的名稱。 假設您似乎正在使用Spring Boot,則可能看起來像這樣:

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

您可能還對Spring Boot的PropertiesLauncher感興趣,該PropertiesLauncher使您可以創建帶有可配置類路徑的可執行jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM