gpt4 book ai didi

java - 当库添加为依赖项时,Spring 初始化不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:17 28 4
gpt4 key购买 nike

我有一个库,它练习 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 绑定(bind)。这意味着您有更多的记录器版本/实现尝试做同样的事情,这会引发异常。

第 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>

如果这不起作用:尝试清除本地 .m2 存储库,那里可能缓存了多个记录器。您可以通过以下方式做到这一点:

mvn dependency:purge-local-repository

这个对我来说工作得很好,但是,如果它仍然遇到绑定(bind)问题,那么使用下面的命令清除存储库,它将保持为空并再次下载所有依赖项(清除后):

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

我不知道为什么会发生这种情况,你还没有发布你的 pom,但我通过始终使用 spring-boot 附带的 slf4j 来避免此类问题,因此不需要额外的依赖项。您可以像这样实例化它:

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

希望对你有帮助

关于java - 当库添加为依赖项时,Spring 初始化不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45761870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com