Spring Boot集成Allure报告时oracle.ucp.jdbc.PoolDataSource抛出IllegalStateException
问题原因
你的报错来自两个核心冲突:
- 你使用的
1.9.8.RC2测试版AspectJ织入器存在兼容缺陷,对Java 11的模块化访问规则适配不完整,触发非法反射警告 - AspectJ默认会扫描所有类尝试织入,在处理Spring Boot内置的Oracle数据源配置类时,因找不到对应Oracle UCP驱动类(测试环境一般不会引入完整UCP依赖)触发织入中断异常
解决方案
1. 升级AspectJ到稳定正式版
修改pom.xml中的aspectj版本配置,替换RC测试版为兼容Spring Boot 2.5.x + Java 11的稳定版:
<properties> <!-- 替换原1.9.8.RC2 --> <aspectj.version>1.9.19</aspectj.version> </properties>
2. 配置AspectJ织入范围,排除第三方包
在src/test/resources目录下新增META-INF/aop.xml文件,限制仅对业务代码和Allure必需的切面进行织入,避免扫描Spring、数据库驱动等第三方类:
<aspectj> <weaver options="-XnoInline -Xlint:ignore"> <!-- 替换为你自身项目的根包路径,比如com.myapp --> <include within="com.myapp..*"/> <!-- 排除第三方包,避免织入冲突 --> <exclude within="org.springframework..*"/> <exclude within="oracle..*"/> <exclude within="javax.sql..*"/> </weaver> <aspects> <!-- 仅保留Allure报告必需的切面 --> <aspect name="io.qameta.allure.aspects.StepsAspects"/> <aspect name="io.qameta.allure.aspects.AttachmentsAspects"/> <aspect name="io.qameta.allure.aspects.SeverityAspects"/> </aspects> </aspectj>
3. 优化Maven Surefire插件配置
升级测试插件版本,添加JDK 11模块化访问参数,移除冲突依赖:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <!-- 升级到原生支持Junit5的稳定版 --> <version>3.1.2</version> <configuration> <testFailureIgnore>false</testFailureIgnore> <argLine> <!-- 解决Java 11+非法反射访问警告 --> --add-opens java.base/java.lang.ClassLoader=ALL-UNNAMED -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" </argLine> <systemProperties> <property> <name>junit.jupiter.extensions.autodetection.enabled</name> <value>true</value> </property> </systemProperties> </configuration> <dependencies> <!-- 移除旧版junit-platform-surefire-provider依赖,新版surefire已原生支持Junit5 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin>
4. 可选:强制指定测试数据源类型
如果仍存在数据源相关报错,在src/test/resources/application-test.yml/properties中添加配置,强制使用Hikari连接池,避免扫描Oracle数据源实现:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
验证
执行mvn clean test运行测试,无报错后执行allure serve target/allure-results即可正常查看测试报告。
内容的提问来源于stack exchange,提问作者dmance
相关产品推荐
相关产品推荐

