找不到KieModule:org.default:artifact:1.0.0-SNAPSHOT

Orb*_*rby 6 drools kie

我在Spring Boot应用程序中使用以下drools配置文件从DataBase加载/执行规则,该数据库在本地运行正常但是当我尝试将应用程序部署到服务器时,我收到错误,说没有找到KieModule Bean.我将丢失的KieModule Bean添加到我的配置文件中,现在我又收到了另一个错误Failed to instantiate [org.kie.api.runtime.KieContainer]: Factory method 'kieContainer' threw exception; nested exception is java.lang.RuntimeException: Cannot find KieModule: org.default:artifact:1.0.0-SNAPSHOT.我的问题是1)为什么我需要这个Bean和2)为什么应用程序在没有缺少Bean的情况下在本地构建/运行?

如果它是部署应用程序所需的必需Bean,我是否需要通过向我的应用程序/ POM添加一些属性来专门为我的环境配置它?

public class DroolsDataBaseConfig {

    @Autowired 
    private DataService dataService;

    @PostConstruct
    public void loadResourcesFromDatabase() {       

        try {
            KieHelper helper = getKieHelper();       
            List<Rule> rulesFromDB = dataService.findAllRules();

            for (Rule rule : rulesFromDB){

                String ruleAsStr = rule.getRule();

                helper.addContent(ruleAsStr, ResourceType.DRL);             
            }

            helper.build(getKieServices().newKieBaseConfiguration());

        } catch (Exception ex) {
            log.error("Exception occured loading rules from Database. Exception is : " + ex);           
        }
     }

     @Bean
     @ConditionalOnMissingBean(KieContainer.class)
     public KieContainer kieContainer() throws IOException {

         final KieRepository kieRepository = getKieServices().getRepository();       

         return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());      
     }

     @Bean
     @ConditionalOnMissingBean(StatelessKieSession.class)
     public StatelessKieSession statelessKieSession() throws IOException {  
         return kieContainer().newStatelessKieSession();
     }

     private KieServices getKieServices() {
        return KieServices.Factory.get();
     }

     @Bean
     @ConditionalOnMissingBean(KieHelper.class)
     public KieHelper getKieHelper() throws IOException {
         return new KieHelper();
     }

     @Bean
     @ConditionalOnMissingBean(KieModule.class)
     public KieModule kieModule() throws IOException {
         return new KieModule() {
                public ReleaseId getReleaseId() {
                    return getKieServices().getRepository().getDefaultReleaseId();
                }
         };
     }

     @Bean
     @ConditionalOnMissingBean(KieBase.class)
     public KieBase kieBase() throws IOException {
         return kieContainer().getKieBase();
     }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

正如评论中所暗示的,这是 Drools 编译问题!\n在日志中,我得到:

\n
KieProject - Unable to build KieBaseModel:defaultKieBase\n[3,14]: [ERR 107] Line 3:14 mismatched input 'java' expecting one of the following tokens: '[package, unit, import, global, declare, function, rule, query]'.\n
Run Code Online (Sandbox Code Playgroud)\n

此消息不会将您定向到确切的错误,而是定向到一般区域。我检查了导入部分,并将导入放入一个单元格中,然后在要导入的包列表中,我再次放入了“导入”关键字。我更正了它以匹配在线示例,并且电子表格可以编译!

\n