You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:54:02