当前位置: 首页 > 知识库问答 >
问题:

spring boot和@ComponentScan在两个JAR之间

盛承
2023-03-14

我有两个项目。一个是DAL项目,它使用spring的neo4j API对neo4j数据库执行CRUD操作。这个项目被打包为一个jar并包含在项目#2中。Project#2是spring的一个restful服务项目,它使用spring boot打包并创建一个可执行的jar,在嵌入式tomcat服务器上执行符文。

当尝试运行spring boot为我创建的可执行jar时,我不断得到这个异常。应至少有1个bean可以作为此依赖项的自动候选项。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

根据我的阅读,如果我使用@ComponentScan,我可以给出注释目录来查看。所以我给了它我的服务项目的基本目录。我给了它包含的dal.jar的基本目录,但仍然没有找到注释的样子。

摘自评论:

组件扫描声明

@ComponentScan({"com.foo.dal.*","com.foo.notification.*"})

堆栈跟踪:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pushCommandsController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.teradata.dal.example.PushRepository com.teradata.notification.rest.controller.PushCommandsController.repository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.teradata.dal.example.PushRepository] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

更新:

基于@chrylis答案:对@componenetscan进行了更改

@ComponentScan({"com.teradata.notification","com.teradata.dal"})

运行到:

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration' is defined

有关DAL项目和服务项目的更多详细信息:

DAL项目:

服务项目:

共有1个答案

郁灿
2023-03-14

@componentscan的参数是包名,这些字符串不是有效的包。从它们中删除.*spring会自动扫描子包。

 类似资料:
  • 我在试着理解这里的区别。我看到一个类已经用它们两个相同的包示例进行了注释: 我理解与API文档的区别,但想详细了解。这是否意味着扫描的任何内容都具有更广泛的wrt Spring上下文可见性,而则没有。如果是这样的话,在中使用一些属性就足以满足在JPA上下文中绑定的需要了,不是吗?

  • 我有两个jar(比如A.jar和B.jar),其中包含一些文件。我想创建第三个jar(比如c.jar),它只包含B.jar中的文件,而不包含A.jar中的文件。是否有用于执行此操作的java API。 谢谢

  • 我有一个java类来处理XLS文件,并使用apache poi jar(poi-ooxml-3.8-20120326.jar)来完成。我最近还部署了BIRT jar来生成一些报告。接下来,当我调用java类进行XLS处理时,得到以下错误。 我发现'WorkbookFactory'类也在BIRT相关的jar(org.eclipse.birt.runtime_4.2.1.v20120918-1113.

  • 我有一个带有myapp-core和myapp-web模块的myapp父pom类型maven项目。myapp-core模块作为依赖项添加到MyApp-Web。 myapp-core模块中的所有类都位于根包com.myapp.core中,而myapp-web模块中的所有类都位于根包com.myapp.web中 主要的application.java也在com.myapp.web包中。由于我的核心模块根

  • 假设我有2个实体类,User和post。 波纹管示例

  • 我的Gradle构建作业在构建/库文件夹下创建两个JAR文件(带有更改的VERSION占位符): 只有fo-VERSION-all.jar表示要上传到CloudFoundry实例的工件 我的问题是,这两个JAR文件都被上传到CloudFoundry实例,导致错误消息,如 没有容器可以运行此应用程序。请确保使用-p命令行参数或路径清单条目推送了一个或多个有效的JVM工件。 好的,-p CLI参数是一