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

Drools 7.73.0.Final执行报错:org.eclipse.sisu.Parameters非绑定注解

Drools 7.73.0.Final 调用buildAll()时触发IllegalArgumentException

错误堆栈信息

java.lang.IllegalArgumentException: org.eclipse.sisu.Parameters is not a binding annotation. Please annotate it with @BindingAnnotation.
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:120) ~[na:na]
    at com.google.inject.Key.ensureIsBindingAnnotation(Key.java:402) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.Key.strategyFor(Key.java:389) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.Key.get(Key.java:251) ~[com.google.inject.guice-4.0.jar:na]
    at org.eclipse.sisu.wire.ParameterKeys.<clinit>(ParameterKeys.java:28) ~[na:na]
    at org.eclipse.sisu.wire.DependencyAnalyzer.<init>(DependencyAnalyzer.java:93) ~[na:na]
    at org.eclipse.sisu.wire.ElementAnalyzer.<init>(ElementAnalyzer.java:104) ~[na:na]
    at org.eclipse.sisu.wire.WireModule.configure(WireModule.java:74) ~[na:na]
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.spi.Elements.getElements(Elements.java:110) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.Guice.createInjector(Guice.java:96) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.Guice.createInjector(Guice.java:73) ~[com.google.inject.guice-4.0.jar:na]
    at com.google.inject.Guice.createInjector(Guice.java:62) ~[com.google.inject.guice-4.0.jar:na]
    at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:481) ~[na:na]
    at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:206) ~[na:na]
    at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:168) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:167) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenEmbedderUtils.buildPlexusContainer(MavenEmbedderUtils.java:141) ~[na:na]
    at org.appformer.maven.integration.embedder.PlexusComponentProvider.<init>(PlexusComponentProvider.java:37) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenEmbedderUtils.buildComponentProvider(MavenEmbedderUtils.java:57) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenEmbedder.<init>(MavenEmbedder.java:91) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenEmbedder.<init>(MavenEmbedder.java:85) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenProjectLoader.newMavenEmbedder(MavenProjectLoader.java:148) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:90) ~[na:na]
    at org.appformer.maven.integration.embedder.MavenProjectLoader.parseMavenPom(MavenProjectLoader.java:84) ~[na:na]
    at org.appformer.maven.integration.MavenPomModelGenerator.parse(MavenPomModelGenerator.java:34) ~[na:na]
    at org.appformer.maven.support.PomModel$Parser.parse(PomModel.java:110) ~[na:na]
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildPomModel(KieBuilderImpl.java:594) ~[na:na]
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:152) ~[na:na]
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:218) ~[na:na]
    at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:192) ~[na:na]

触发场景

调用KieBuilder的buildAll()方法时触发,相关代码如下:

KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();

kfs.write(ResourceFactory.newFileResource(new File(drlPath)));

KieBuilder kb = ks.newKieBuilder(kfs);

kb.buildAll();
if (kb.getResults().hasMessages(Message.Level.ERROR))
   throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());

KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());

KieSession kSession = kContainer.newKieSession();

问题原因

这是Guice版本与Eclipse Sisu版本不兼容导致的冲突:Guice 4.0要求所有绑定注解必须标注@BindingAnnotation,但旧版本的Eclipse Sisu的Parameters注解未满足该要求。Drools 7.73.0.Final依赖的组件中可能引入了冲突的Guice 4.0版本。

解决方案

1. 排除冲突的Guice依赖并引入兼容版本

在Maven或Gradle中排除Drools依赖带来的旧版Guice,替换为兼容的版本(如Guice 4.2.3):

Maven配置示例:

<!-- 排除drools-compiler中的冲突Guice -->
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>7.73.0.Final</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 添加兼容的Guice版本 -->
<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.3</version>
</dependency>

2. 检查并清理依赖冲突

执行依赖树分析命令,找出引入旧版Guice的其他依赖:

mvn dependency:tree

根据输出结果,对冲突的依赖进行排除操作,确保项目中只保留兼容的Guice版本。

3. 绕过Maven Pom解析(可选)

如果你的场景不需要Maven集成,可以尝试直接构建KieModule而不触发Pom模型解析,避免初始化Plexus容器:

KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();

kfs.write(ResourceFactory.newFileResource(new File(drlPath)));

// 直接构建KieModule,不触发Pom解析
KieModule kieModule = ks.newKieBuilder(kfs).buildAll().getKieModule();
kr.addKieModule(kieModule);

KieContainer kContainer = ks.newKieContainer(kieModule.getReleaseId());
KieSession kSession = kContainer.newKieSession();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:36:59