Java maven多模块项目中的Spring依赖注入
我正在构建一个包含4个模块的多模块maven项目。对于其中两个(一个带有rest控制器,另一个带有核心业务逻辑),我需要依赖注入的功能。但这根本不起作用。这里是我的父母pom:Java maven多模块项目中的Spring依赖注入,java,spring,maven,Java,Spring,Maven,我正在构建一个包含4个模块的多模块maven项目。对于其中两个(一个带有rest控制器,另一个带有核心业务逻辑),我需要依赖注入的功能。但这根本不起作用。这里是我的父母pom: .... <groupId>com.example.taskexecutor</groupId> <artifactId>taskexecutor</artifactId> <parent> <groupId>org.springfr
....
<groupId>com.example.taskexecutor</groupId>
<artifactId>taskexecutor</artifactId>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
....
<modules>
<module>taskexecutor-service</module>
<module>taskexecutor-core</module>
<module>taskexecutor-common</module>
<module>taskexecutor-rules</module>
</modules>
.....
。。。。
com.example.taskexecutor
任务执行者
org.springframework.boot
spring启动程序父级
2.3.4.1发布
....
任务执行器服务
任务执行器内核
任务执行器公用
任务执行器规则
.....
儿童pom服务:
<parent>
<groupId>com.example.taskexecutor</groupId>
<artifactId>taskexecutor</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>taskexecutor-service</artifactId>
.....
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.example.taskexecutor</groupId>
<artifactId>taskexecutor-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
com.example.taskexecutor
任务执行者
0.0.1-快照
任务执行器服务
.....
org.springframework.boot
弹簧启动机amqp
org.springframework.boot
SpringBootStarterWeb
org.projectlombok
龙目
真的
org.springframework.boot
弹簧启动机tomcat
假如
org.springframework.boot
弹簧起动试验
测试
org.junit.vintage
朱尼特老式发动机
org.springframework.amqp
春兔试验
测试
com.example.taskexecutor
任务执行器内核
${project.version}
子pom核心(具有我无法注入服务项目的类的核心)
。。。。
com.example.taskexecutor
任务执行者
0.0.1-快照
任务执行器内核
...
org.springframework.boot
SpringBootStarterWeb
两个项目(服务和核心)中的包是相同的:com.example.application(其中是服务项目中带有@SpringBootApplication的主类)、com.example.application.restcontroller(其中是服务项目中的控制器)、com.example.application.core(其中是我无法注入核心项目的@组件)
在我的核心项目中,com.example.application.core下有一个@Component,我将在类中注入com.example.application.restcontroller包下的服务项目中。
在同一个项目中,在主类的包下,依赖注入工作得非常好。在两个不同的模块之间,我无法实现这一点(nullPointerException)
任何建议都将不胜感激您对软件包的描述很难理解。但很可能是组件扫描问题。请确保您正在扫描所有软件包。例如,在
taskexecutor服务
中,您可以执行以下操作:
@ComponentScan(basePackages={“com.example.taskexecutor”,“com.example.application”})
扫描的是什么包?由于我没有编写@ComponentScan,我假设要扫描的默认包是带有SpringBootApplication注释(和运行)的主类下的包.So.com.example.application和这个包下的所有包(比如我的组件所在的com.example.application.core)。如果不想使用@ComponentScan,也可以使用spring自动配置,请参见此
....
<parent>
<groupId>com.example.taskexecutor</groupId>
<artifactId>taskexecutor</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>taskexecutor-core</artifactId>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>