一、环境概述
Drools 7.0当前最新的是7.74.1 Final,Drools 8.0不兼容JDK8了(你发任你发,我用java8),7.73.0.Final这个兼容最稳定所以选这个

JDK:openjdk version "1.8.0_452"
Maven: maven 3.8.8
Drools:Drools 7.73.0.Final

二、项目依赖
当前为纯粹的Drools环境,没有引入Spring或者SpringBoot,Drools官方没有提供SpringBoot整合包,只有一个简单的Spring整合包。

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <drools.version>7.73.0.Final</drools.version>
        <slf4j.version>1.7.30</slf4j.version>
        <logback.version>1.2.13</logback.version>
        <mvel2.version>2.4.14.Final</mvel2.version>
        <lombok.version>1.18.30</lombok.version>
        <junit.version>4.13.2</junit.version>
    </properties>
    <dependencies>
        <!-- Drools 核心依赖(必须) -->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <!-- 编译drl文件需要 -->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <!-- drool-mvel -->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-mvel</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <!-- mvel2 -->
        <dependency>
            <groupId>org.mvel</groupId>
            <artifactId>mvel2</artifactId>
            <version>${mvel2.version}</version>
        </dependency>
        <!-- 日志 SL4J+logback -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- junit 4 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

三、实体、kmodule.xml以及测试的drl文件
src/main/java/com/online/admin/entity/Person.java

package com.online.admin.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Person
{
    private String name;
    private int age;
}

src/main/resources/META-INF/kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里需要注意,kbase的那么可以随便起,但是packages的名称必须和你drl文件的package声明一致 -->
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="ksession-rules"/>
    </kbase>
</kmodule>

src/main/resources/rules/rule1.drl

package rules;
   import com.online.admin.entity.Person;

   rule "Age Check Rule"
       when
           $p : Person(age >= 18)
       then
           System.out.println("[规则触发] " + $p.getName() + " 是成年人,年龄: " + $p.getAge());
   end

   rule "Check using eval"
       when
           $p : Person()
           eval( $p.getAge() >= 18 )
       then
           System.out.println("条件满足");
   end

四、单元测试

import com.online.admin.entity.Person;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AppTest {
    private static final Logger logger = LoggerFactory.getLogger(AppTest.class);

    @Test
    public void testRuleExecution() {
        KieServices kieServices = null;
        KieContainer kieContainer = null;
        KieSession kieSession = null;

        try {
            //1、获取KieService
            kieServices = KieServices.Factory.get();
            if (kieServices == null) {
                throw new IllegalStateException("无法获取KieServices实例");
            }
            //2、获取KieContainer
            kieContainer = kieServices.getKieClasspathContainer();
            if (kieContainer == null) {
                throw new IllegalStateException("无法创建KieContainer");
            }
            //3、获取KieSession
            kieSession = kieContainer.newKieSession("ksession-rules");
            if (kieSession == null) {
                throw new IllegalStateException("无法创建KieSession: ksession-rules");
            }
            //4、准备数据,插入事实对象
            Person adult = new Person("李四", 25);
            kieSession.insert(adult);
            //5、触发规则
            int firedRules = kieSession.fireAllRules();
            logger.info("执行的规则数量: {}", firedRules);

        }
        catch (IllegalArgumentException e)
        {
            logger.error("参数错误: {}", e.getMessage(), e);
            throw e;
        }
        catch (IllegalStateException e)
        {
            logger.error("状态错误: {}", e.getMessage(), e);
            throw e;
        }
        catch (Exception e)
        {
            logger.error("规则执行过程中发生未知错误: {}", e.getMessage(), e);
            throw e;
        }
        finally
        {
            // 6. 释放KieSession
            if (kieSession != null) {
                try
                {
                    kieSession.dispose();
                    logger.debug("KieSession已释放");
                }
                catch (Exception e)
                {
                    logger.warn("释放KieSession时发生错误: {}", e.getMessage());
                }
            }
        }
    }
}