2017-08-18 47 views
1

我有一個庫,它可以在運行Spring項目時運行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.spring[email protected]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 

任何人都可以幫助我解決這個問題。

+0

你怎麼你的第一個lib中jar添加到您的第二個項目?如果通過Maven,那麼你是如何將你的第一個lib jar發佈到Maven repo的?請分享您的pom文件相關的春天 – dimitrisli

+0

發佈您的pom。你在部署戰爭嗎? – SamDJava

+0

後*兩個* POMs。看起來像版本不匹配。 – chrylis

回答

0

第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號線告訴你到哪裏尋找更多的錯誤信息。如果你這樣做,你會看到他們的建議here。如果你在你的POM多個實現(我還沒有看到它,雖然),你可以排除的一個不是在線5,就像這樣:

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

如果那並不是」 t工作:嘗試清除您的本地.m2存儲庫,也許有幾個記錄器被緩存在那裏。你可以做到這一點:

mvn dependency:purge-local-repository 

那一個正常工作與我,但是,如果它仍然運行具有約束力的問題,不是清除與波紋管命令回購,這將保持爲空,然後重新下載所有的依賴關係(清洗後):

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

我不知道爲什麼會發生,你有沒有貼出你的POM,但我總是通過使用彈簧引導因此不需要額外的依賴已經自帶了SLF4J避免這樣的問題。你可以實例化它,像這樣:

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

希望它可以幫助

+0

我更關心在後面的部分拋出的NoClassDefFoundError。綁定中存在衝突,但似乎正常工作。這只是一個警告。 – surya

+0

如果不能查看代碼就很難說。嘗試比較兩個項目並查看哪些事情是不同的。如果您使用不同版本的彈簧父級,可能會發生。NoClassDefFoundError和這樣的錯誤也會導致春天找不到你的課程。也許你沒有掃過你的所有包裹或類似的東西。什麼是圖書館,順便說一句? –