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

Apache Deltaspike @ConfigProperty在Jakarta EE10/WildFly 27 Final中失效

问题分析与解决方案

核心问题

迁移至Jakarta EE10(WildFly 27 Final、Java 17)后,原Apache Deltaspike的@Inject @ConfigProperty注入失效,报错显示WELD无法匹配依赖:容器识别到SmallRye Config的生产者(io.smallrye.config.inject.ConfigProducer),但注入点的@Default限定符与生产者的@Any @ConfigProperty限定符不匹配,同时存在Deltaspike与Jakarta EE10内置配置规范的兼容性冲突。

原因拆解

  1. 注解混淆:Apache Deltaspike的@ConfigProperty(org.apache.deltaspike.core.api.config.ConfigProperty)与WildFly内置SmallRye/Jakarta Config的@ConfigProperty重名,容器优先加载了SmallRye的实现,导致原有Deltaspike注入逻辑失效。
  2. 版本不兼容:旧版Deltaspike未适配Jakarta EE10的API规范,无法在新容器环境中正常工作。
  3. 限定符不匹配:注入点标注的@Default限定符,与SmallRye Config生产者的限定符集合不匹配,导致依赖查找失败。

解决方案

方案1:继续使用Apache Deltaspike配置

步骤1:升级Deltaspike版本

使用适配Jakarta EE10的Deltaspike 2.1.x及以上版本,更新项目依赖(以Maven为例):

<dependency>
    <groupId>org.apache.deltaspike.core</groupId>
    <artifactId>deltaspike-core-api</artifactId>
    <version>2.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.deltaspike.core</groupId>
    <artifactId>deltaspike-core-impl</artifactId>
    <version>2.1.0</version>
    <scope>runtime</scope>
</dependency>

步骤2:明确注解导入

确保代码中@ConfigProperty的导入为Deltaspike的包:

import org.apache.deltaspike.core.api.config.ConfigProperty;

步骤3:排除容器内置配置(可选)

若仍存在冲突,在jboss-deployment-structure.xml中排除WildFly的SmallRye Config子系统:

<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="microprofile-config-smallrye"/>
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

方案2:改用Jakarta EE10标准配置(推荐)

直接使用Jakarta Config规范替代Deltaspike,适配容器原生支持:

步骤1:替换注解与用法

移除@Default,改用Jakarta Config的@ConfigProperty并通过defaultValue设置默认值:

import jakarta.config.ConfigProperty;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Logger;

@RequestScoped
public class KbMaxConnector {

    @Inject
    @ConfigProperty(name = "kbmax.url", defaultValue = "")
    private String url;
    
    @Inject
    @ConfigProperty(name = "kbmax.email", defaultValue = "")
    private String email;
    
    @Inject
    @ConfigProperty(name = "kbmax.password", defaultValue = "")
    private String password;
    
    @Inject
    private Logger LOGGER;

    public KBMaxModelsQuote getQuote(Integer quoteId) throws ApiException {
        LOGGER.debug("Calling KbMax quote api with quoteId: {}, on url:{} user: {} password: {}",quoteId,url,email,password);
        QuotesApi quotesApi = new QuotesApi(url, email, password);
        return quotesApi.apiQuotesByIdGet(quoteId);
    }
}

步骤2:移除Deltaspike依赖

删除项目中所有Deltaspike相关的依赖配置,直接使用WildFly内置的SmallRye Config实现。


方案3:修复限定符匹配(临时兼容)

若需保留原有代码结构且切换至SmallRye Config,移除注入点的@Default限定符:

@Inject
@ConfigProperty(name = "kbmax.url")
private String url;

注:此方式仅适用于放弃Deltaspike、改用SmallRye Config的场景。


验证步骤

  1. 清理项目构建缓存(如target目录)
  2. 重新部署至WildFly 27
  3. 检查日志是否仍存在WELD注入错误

内容的提问来源于stack exchange,提问作者Gerry Askefalk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:10:51