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

Simple Quarkus Kogito项目构建失败:依赖歧义与未满足依赖

解决Quarkus+Kogito+jBPM项目的依赖歧义构建错误

你遇到的是CDI依赖注入的经典歧义问题:项目里同时存在两组同名的核心类,让Quarkus的CDI容器无法确定该注入哪一个具体实现。具体冲突点是:

  • 一组是Kogito框架自带的org.kie.kogito.app.Application和org.kie.kogito.app.ApplicationConfig
  • 另一组是你项目自定义的com.demo.poc.Application和com.demo.poc.ApplicationConfig

下面是三种可行的解决方案,按推荐程度排序:

方案1:重命名自定义类(最推荐)

最简单直接的方式是修改你自定义的类名,彻底避免和框架类名冲突:

  • 把com.demo.poc.Application改成com.demo.poc.DemoApplication
  • 把com.demo.poc.ApplicationConfig改成com.demo.poc.DemoApplicationConfig

修改后同步更新所有引用这些类的代码,再执行mvn clean compile quarkus:dev,CDI容器就能清晰区分框架类和你的自定义类,歧义问题会直接消失。

方案2:用自定义限定符明确注入目标

如果不想修改类名,可以通过CDI限定符标记你的自定义Bean,告诉容器该选择哪一个实现:

  1. 新建一个自定义限定符注解:
@Qualifier
@Target({TYPE, METHOD, PARAMETER, FIELD})
@Retention(RUNTIME)
public @interface DemoApplication {
}
  1. 在你的自定义Application和ApplicationConfig类上添加这个限定符:
@ApplicationScoped
@DemoApplication
public class Application {
    // 你的现有业务代码
}
@ApplicationScoped
@DemoApplication
public class ApplicationConfig {
    // 你的现有配置代码
}
  1. 在需要注入的地方(比如CreateFormProcessResource)指定使用这个限定符:
@Inject
@DemoApplication
private org.kie.kogito.Application application;

这样容器就会明确选择你标记了@DemoApplication的自定义Bean,不会再出现依赖歧义。

方案3:排除Kogito的默认Bean(适合完全替代框架实现的场景)

如果你的自定义类是要完全替换Kogito的默认Application和ApplicationConfig实现,可以在application.properties里添加配置,让Quarkus排除框架自带的这两个Bean:

quarkus.cdi.exclude.beans=org.kie.kogito.app.Application,org.kie.kogito.app.ApplicationConfig

配置生效后,容器只会加载你自定义的实现类,自然就不会有歧义问题了。

额外小提示

  • 执行构建前先跑一遍mvn clean,清理掉旧的生成代码,避免残留文件干扰构建。
  • 检查项目中是否有Kogito自动生成的代码——Kogito有时候会根据流程定义生成Application或Config类,要确保自定义类不会和这些生成类重名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:42:46