簡體   English   中英

將庫添加為依賴項時,Spring初始化不起作用

[英]Spring initialization not working when the library is added as a dependency

我有一個練習Spring的庫,在項目中運行時會正確初始化它。 當我啟動另一個項目並將該庫添加為依賴項時,出現初始化失敗。 這是代碼:

    public class CBRepoFactory implements IRepoFactory {

    private UserActivityRepositoryService userActivityRepositoryService;

    private ItemInformationRepositoryService itemInformationRepositoryService;

    public CBRepoFactory() {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(Config.class);
        ctx.scan("com.example.db.app");
        ctx.refresh();
        userActivityRepositoryService = ctx.getBean(UserActivityRepositoryService.class);
        itemInformationRepositoryService = ctx.getBean(ItemInformationRepositoryService.class);
        // ctx.close();
    }

    @Override
    public IRepoClient<UserActivity> getUserActivityRepositoryService() {
        // TODO Auto-generated method stub
        return this.userActivityRepositoryService;
    }

    @Override
    public IRepoClient<ItemInformation> getItemInformationRepositoryService() {
        // TODO Auto-generated method stub
        return this.itemInformationRepositoryService;
    }
   }

這是我從項目中獲得的例外,將其添加為依賴項時。

[main] INFO org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3d71d552: startup date [Fri Aug 18 14:05:41 PDT 2017]; root of context hierarchy
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/io/support/PropertySourceFactory
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:301)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at com.ebay.db.app.clientImpl.CBRepoFactory.<init>(CBRepoFactory.java:23)
    at com.ebay.db.app.clientImpl.RepoFactoryBuilder.createFactory(RepoFactoryBuilder.java:11)
    at testDBClient.testProgram.main(testProgram.java:15)
Caused by: java.lang.ClassNotFoundException: org.springframework.core.io.support.PropertySourceFactory
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 9 more

誰能幫我這個。

前5行向您顯示您需要的所有信息,甚至是找到答案的地方:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/sukrishna/.m2/test2/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/sukrishna/.m2/test2/org/slf4j/slf4j-log4j12/1.7.10/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]

第1行陳述了實際的問題。 多個SLF4J綁定。 這意味着您有更多的記錄器版本/實現試圖做同樣的事情,這引發了異常。

第2行和第3行顯示了發生沖突的位置

第4行告訴您在哪里可以找到有關該錯誤的更多信息。 如果這樣做,您會在這里看到他們的建議。 如果您的pom中有多個實現(不過我沒有看到),則可以排除不在第5行的實現 ,如下所示:

<exclusions>
      <exclusion> 
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
      </exclusion>
      <exclusion> 
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
      </exclusion>
    </exclusions> 

如果不起作用:嘗試清除您的本地.m2存儲庫,可能有幾個記錄器緩存在那里。 您可以執行以下操作:

mvn dependency:purge-local-repository

那對我來說很好用,但是,如果仍然遇到綁定問題,而不是使用bellow命令清除回購協議,它將保留為空並再次下載所有依賴項(清除后):

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false

我不知道為什么會這樣,您還沒有發布pom,但是我總是通過使用spring-boot附帶的slf4j來避免此類問題,因此不需要任何額外的依賴關系。 您可以這樣實例化它:

private final Logger logger = LoggerFactory.getLogger(this.getClass());

希望能幫助到你

暫無
暫無

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

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