文章来源:Introduction: Drools Document
本文简介:本文翻译自Drools 8.44.0.Final版本的官方文档。本文对Drools进行了简述,介绍了如何对Drools源码的迭代做出贡献和如何从源码安装Drools。并且译者还根据自身环境配置经历,完善了官方文档中从源码安装Drools的过程。
翻译初衷:由于国内缺乏Drools(尤其是8.x版本)相关资料,没有一条龙式的安装指南,且8.x版本同7.x版本的官方文档有较大差异,因此译者认为对8.x版本的官网文档进行翻译和完善是有必要的
文章目录
Drools 是一组专注于智能自动化和决策管理的项目,主要提供基于推理的前向链和后向链规则引擎、DMN 决策引擎和其他项目。规则引擎是创建专家系统的基本构件,在人工智能领域,专家系统是一个模拟人类专家决策能力的计算机系统。
Drools 是 基尔(KIE, Knowledge Is Everything)开源社区的一部分,该社区由各种相关项目或项目组组成,为业务自动化和管理提供完整的解决方案组合。其他最重要的 KIE 项目或项目群包括:
- Kogito 是一款用于构建智能应用程序的云原生业务自动化工具,其功能久经考验。它由多个组件组成,包括 Drools、用户界面建模工具(如 VS Code 编辑器扩展等)。
- OptaPlanner 是一款面向软件开发人员的快速、易用、开源人工智能约束求解器。它是一个轻量级、可嵌入的规划引擎
- jBPM 是一个用于构建业务应用程序的工具包,可帮助实现业务流程和决策的自动化。
其他资源
Drools源代码(GitHub - kiegroup/drools: Mirror of https://github.com/apache/incubator-kie-drools)
如何参与到源码开发中
我们经常被问到:“我如何参与其中?”答案很简单,只需编写一些代码并提交即可🙂
以下是我们的要求概览,以及一些一般性建议。如果您贡献了一些好的作品,请考虑将其写入博客🙂
要求
在贡献代码之前,您需要拥有:
步骤一:通过JIRA提交问题(issue)或改进请求
我们使用 JIRA 来跟踪新的功能请求和错误等。如果您发现了 Drools 中的问题,请在 DROOLS JIRA 项目下的 JIRA 中提交一个错误报告。对于代码贡献,您可以为自己创建一个 JIRA 报告,这样您的贡献就会被跟踪。这样可确保所有请求都被记录并分配到发布计划中,所有讨论都被记录在一个地方。错误报告、错误修复、功能请求和功能提交都应在这里进行。一般问题应在邮件列表中提出。提交的次要代码(如格式或文档修复)不需要创建相关的 JIRA 问题。
步骤二:通过GitHub PR提交要贡献的源代码
详参:droolsjbpm-build-bootstrap/README.md at main · kiegroup/droolsjbpm-build-bootstrap · GitHub
我们接受 GitHub 拉取请求(PR)形式的源代码贡献。创建拉取请求的步骤如下:
-
创建 Drools 源代码存储库的分支。
-
克隆您的分叉仓库。
-
在您的分叉仓库上创建一个新的 git 分支。
-
在 DROOLS JIRA 项目中创建一个新的 JIRA 来跟踪您的工作。
-
在新分支上进行代码修改并提交。
- 请不要忘记在提交前测试你的代码。我们要求每项代码更改都要经过测试。
- 提交需要以 JIRA 问题 ID 开头,如 DROOLS-1946。这样可以确保提交在 JIRA 中相互参照,这样我们就能在 JIRA 中看到特定问题的所有提交。
- 一般来说,请尽量避免将不相关的问题或变更合并到同一个提交或拉动请求中。如果您想贡献多个内容,请将它们分成不同的拉取请求。
- 请确保您的更改不会破坏项目的其他部分或测试。要运行所有测试,请参阅#从源代码安装Drools。
-
将新分支推送到您的 GitHub 分支仓库。通常情况下,在推送新分支之前,最好先将本地分支与主 Drools 源代码仓库中的最新修改同步(sync your local branch)。
-
向 GitHub 主 Drools 源代码仓库创建拉取请求(PR)。创建拉取请求时,会有一个描述模板。请根据模板填写描述。默认情况下,"允许维护者编辑和访问机密(Allow edits and access to secrets by maintainers)"设置应保持启用状态,以便维护者根据需要对您的 PR 进行协作。
-
您的拉取请求将得到维护者的审核,因此请做好准备,如果您的PR有维护者不清楚的地方,请回复维护者的疑问;如果在审核过程中提出了一些代码要求,请提供代码更新。请耐心等待,维护者可能需要一些时间才能处理您的拉取请求,因为可能有很多拉取请求需要审核。
-
如果维护者批准了您的请求,该请求将被合并到 Drools 源代码库中。
从远程仓库安装
请参考此篇文章:《Drools8.44.0官方文档翻译(二):远程库安装和Decision Service的使用教程(上)》
从源代码安装Drools
Drools 主要是一套基于 Java 的项目,使用 Maven 作为构建系统。要构建 Drools 资源库,请执行以下操作(由于原文对本小节的描述极为简略,因此译者对本节进行了完善,以下均基于Linux系统和IntelliJ编译器展开介绍):
步骤一:安装 Java JDK,至少版本 11
- 在终端使用
java -version
查看系统是否自带java环境,若无响应则说明未自带;若有,使用yum list installed | grep java
或rpm -qa | grep java
查看自带的java版本是否等于或高于11,较小的版本无需删除(在IntelliJ中可以选择JDK版本) - 若没有符合要求的JDK,从官网下载至指定文件夹
- 进入压缩包所在文件夹并解压(以JDK 11.0.21为例)
也可以通过参数tar -zxvf jdk-11.0.21_linux-x64_bin.tar.gz
-C
指定解压至指定文件夹,若不设置则解压至压缩包所在源目录tar -zxvf jdk-11.0.21_linux-x64_bin.tar.gz -C [指定文件夹地址]
- 设置环境变量(本文选择修改用户环境变量而非全局环境变量)。使用
vim /etc/profile
进入文件,输入i
进入编辑模式,在文件最底部插入:
按export JAVA_HOME=[压缩包解压后所在地址]/jdk-11.0.21 export CLASSPATH=:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
esc
,再输入:wq
保存退出,输入source /etc/profile
使修改的环境生效 - 再次使用
java -version
查看是否安装成功
步骤二:安装至少 3.8.6 版本的 Maven
参考:
[1] Linux安装maven(详细教程)
[2] linux下配置maven后使用命令mvn报错NB: JAVA_HOME should point to a JDK not a JRE解决方案
[3] Linux下安装maven, mvn -v报错: JAVA_HOME should point to a JDK not a JRE
Tip:尽量使用最新的 Maven 版本。
安装步骤
-
在官网下载最新版maven
-
解压maven压缩包(译者解压在/opt/maven目录下)
-
进入解压后文件夹(以apache-maven-3.9.6为例)所在位置,并配置maven仓库(建议配置,国内的下载jar快些),设置阿里镜像仓库。首先
cd apache-maven-3.9.6
进入目录,然后创建仓库存储目录mkdir ck
,接着cd conf
进入conf目录,并vi settings.xml
编辑文件,找到标签<localRepository>和<mirror>并粘贴以下相应代码(请自行修改解压后的maven文件夹所在位置),如下图所示:<localRepository>/opt/maven/apache-maven-3.9.6/ck</localRepository>
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
-
保存settings.xmlx修改后配置maven环境变量。此处译者同样是修改用户环境变量。先
vim ~/.bashrc
,在最后一行加上以下代码(请自行修改解压后的maven文件夹所在位置) ,保存退出。export MAVEN_HOME=/opt/maven/apache-maven-3.9.6 export PATH=$PATH:$MAVEN_HOME/bin
-
重新加载环境变量
source ~/.bashrc
。 -
测试安装结果
mvn -v
,如下图所示,若终端成功返回版本信息,说明安装成功。
错误提示
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
出现以上错误,可能是因为直接install
了java-XXX-openjdk.XXX
并出现以下两种情况(若参照以上安装步骤应该不会出现这种错误):
- 只安装了jre没有安装对应的
java-XXX-openjdk-devel.XXX
- 环境变量JAVA_HOME设置错误,没有直接指向java所在根目录,而指向了其软链接对象(详参本小节参考文献[3])
步骤三:克隆 Drools 源代码库。
- 以下是官方文档的操作指南,但是,可能受环境影响,译者无法根据步骤四成功编译直接克隆得到的源代码,因此不建议这样操作
git clone https://github.com/kiegroup/drools.git
cd drools
- 译者的建议是在GitHub官方库中选择自己目标版本的Tag(如下图所示),然后下载压缩文件并解压至本地目录中
- 注:采用此方法译者尝试编译了8.44.0.Final、8.40.Final和7.74.0.Fianl版本,只成功编译了7.74.0.Final版本,如果有成功编译其他版本的朋友,欢迎在评论区分享一下成功经验
- 注:采用此方法译者尝试编译了8.44.0.Final、8.40.Final和7.74.0.Fianl版本,只成功编译了7.74.0.Final版本,如果有成功编译其他版本的朋友,欢迎在评论区分享一下成功经验
步骤四:在命令行上运行 Maven 编译。
编译
先进入克隆下来的官方源码或解压后的文件夹内(这些文件夹内都会有一个pom.xml文件),通过测试执行 Maven 构建(Maven build executed with tests:):
mvn clean install
在没有测试的情况下执行 Maven 构建(Maven build executed without tests):
mvn clean install -Dquickly
错误提示
参考:Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.
注:本小节的操作只能解决所描述的错误,并不意味着这样操作后不会继续产生bug
我在使用mvn clean install -Dquickly
进行编译时出现如上图所示的错误(图中是一个警告,但是在后续的返回信息中变成了错误),表明程序没有权限访问指定文件。为了快速解决问题,译者直接给了/opt/maven及其所有子文件最高权限:
sudo chmod -R 777 /opt/maven
然后重新执行编译指令又出现了新错误(如下图所示),该问题的产生可能是因为发生了依赖冲突问题。
根据本小节参考资料,可以通过以下编译指令跳过 enforcer 插件的规则检查(Enforcer 插件用于强制项目的配置和依赖符合一些规则)
mvn clean install -DskipTests -Denforcer.skip=true