Quarkus多模块项目中自定义测试注解无法正常工作
问题分析
你遇到的问题核心是Quarkus测试上下文在多模块场景下,未正确扫描到核心模块中的自定义注解及关联Bean。当把注解移到my-api模块时,测试上下文能直接识别当前模块的内容,因此可以正常工作。
解决方案
1. 确保核心模块依赖被my-api测试类路径加载
在my-api模块的pom.xml里,将核心模块的依赖设置为testCompile(或Gradle的testImplementation),保证测试阶段能读取到核心模块的注解类:
<dependency> <groupId>你的核心模块groupId</groupId> <artifactId>核心模块artifactId</artifactId> <version>对应版本号</version> <scope>testCompile</scope> </dependency>
2. 配置Quarkus测试扫描核心模块的包
在my-api模块的src/test/resources/application.properties中添加包扫描配置,指定核心模块和当前模块的基础包路径,让测试上下文能扫描到核心模块的Bean:
quarkus.test.scanned-packages=com.your.core.package,com.your.myapi.package
把上述路径替换成你实际的核心模块和my-api模块的基础包名。
3. 确保CDI Stereotype跨模块生效
因为你的注解用了@Stereotype,需要核心模块的CDI配置正确。在核心模块的src/main/resources/META-INF/beans.xml中设置bean发现模式为all,确保CDI能扫描到核心模块的所有类:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd" version="2.0" bean-discovery-mode="all"> </beans>
4. 升级Quarkus补丁版本
Quarkus 2.14.2.Final在多模块测试场景下存在部分注解跨模块的已知问题,建议升级到同系列的最新补丁版(比如2.14.7.Final),这类小版本升级不会破坏现有功能,还能修复不少测试相关的bug。
验证
修改完配置后重新运行my-api的测试类,如果不再抛出javax.enterprise.inject.UnsatisfiedResolutionException,说明问题解决。
内容的提问来源于stack exchange,提问作者DV Singh
相关产品推荐
相关产品推荐

