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

如何在Open Liberty的ShrinkWrap+Arquillian测试中注入MicroProfile ConfigProperty

在Open Liberty Arquillian托管测试中读取microprofile-config.properties失败的解决办法

以下是针对问题的具体排查和修复步骤:

1. 确保Arquillian部署包含主资源配置文件

Arquillian托管容器测试默认只打包测试相关资源,不会自动包含src/main/resources下的文件。需要在测试类的@Deployment方法中显式添加配置文件:

@Deployment
public static WebArchive createDeployment() {
    return ShrinkWrap.create(WebArchive.class, "test.war")
            .addClass(AppConfig.class)
            // 将主资源目录的配置文件加入部署包
            .addAsResource("META-INF/microprofile-config.properties", "META-INF/microprofile-config.properties");
}

这里第一个参数是项目中配置文件的相对路径(基于src/main/resources),第二个参数是部署后在war包中的路径,必须保持一致才能被MP Config识别。

2. 验证配置文件的实际部署位置

部署测试后,到Liberty服务器的应用目录检查配置文件是否存在:
[Liberty安装目录]/usr/servers/[测试服务器名]/apps/test.war/WEB-INF/classes/META-INF/microprofile-config.properties
如果文件不存在,说明Arquillian打包时没包含进去,需要调整addAsResource的路径参数。

3. 确认CDI Bean的托管注解

AppConfig类必须是CDI托管Bean,否则容器无法处理@Inject和@ConfigProperty注入。给类添加作用域注解,比如:

@ApplicationScoped
public class AppConfig {
    @Inject
    @ConfigProperty(name = "serviceName")
    private String serviceName;

    public String getServiceName() {
        return serviceName;
    }
}

4. 检查服务器特性加载状态

虽然server.xml已启用mpConfig-3.0和cdi-3.0,但要确认这些特性在测试启动时已成功加载。查看服务器启动日志,找类似CWWKF0012I: 已启动以下特性: [cdi-3.0, mpConfig-3.0, ...]的日志条目,确保特性正常启用。

5. 临时用测试资源目录验证

如果以上步骤无效,可以把microprofile-config.properties复制到src/test/resources/META-INF下,然后在@Deployment中简化为:

.addAsResource("META-INF/microprofile-config.properties");

这样可以快速验证配置是否能被读取,排除主资源目录的路径问题。

内容的提问来源于stack exchange,提问作者Scott Kurz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:20:54