当前位置: 首页 > 知识库问答 >
问题:

Optaplanner-部署项目时无法编译drools文件

越涵衍
2023-03-14

我们使用Java 11开发了一个SpringBoot项目,使用optaplanner core并在Drools文件中定义规则。我们在intelliJ和JDK中运行应用程序没有问题。

然后,我们将该应用部署到安装了JRE的Azure应用服务上。我们得到以下错误:

Caused by: org.kie.memorycompiler.KieMemoryCompilerException: 
Cannot find the System's Java compiler. Please use JDK instead of JRE or add drools-ecj dependency to use in memory Eclipse compiler

我们试图添加以下依赖项,但仍然出现相同的错误:

<dependency>
    <groupId>org.optaplanner</groupId>
    <artifactId>optaplanner-core</artifactId>
    <version>8.4.1.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-ecj</artifactId>
    <version>7.51.0.Final</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>ecj</artifactId>
    <version>3.26.0</version>
</dependency>

有人知道如何解决这个问题吗?

非常感谢。

共有2个答案

韦宏扬
2023-03-14

如果您无法使用JDK运行optaplanner,可以将解算器配置更改为

<solver>
  <scoreDirectorFactory>
    <droolsAlphaNetworkCompilationEnabled>false</droolsAlphaNetworkCompilationEnabled>
  </scoreDirectorFactory>
</solver>

如果您正在对使用ConstraintVerifier的java约束使用单元测试,请像下面这样实例化它

new DefaultConstraintVerifier<>(new MyConstraints(), SolutionDescriptor.buildSolutionDescriptor(myModelClasses))
  .withDroolsAlphaNetworkCompilationEnabled(false)

但是:据我所知,禁用drools alpha网络编译器通常会对性能产生影响。

太叔烨霖
2023-03-14

添加drools ecj并不能真正解决这个问题。错误信息具有误导性。

使用JDK而不是JRE。最简单的方法是升级到Java11(或更高版本),因为它只附带JDK

 类似资料:
  • 无法将快照工件部署到Nexus存储库。我一直收到返回代码400。无法部署项目:无法传输项目网络。iin:iin-web-0.0.1-snapshot:jar:iin-parent从/到快照(http://localhost:8081/nexus/content/repositories/snapshots/net/iin/iin-web-0.0.1-snapshot/iin-parent/iin-

  • 我使用 VS 2017 制作了一个 MVC 项目,我在本地计算机上使用 IIS 服务器 v10 进行测试,现在我将我的项目上传到带有 Windows 服务器 2008 和 IIS 服务器 v6 的服务器我得到以下编译错误代码 - 2146232576 我已经尝试了以下解决方案编译错误-2146232576使用nuget PM删除包- 我也没有使用web部署工具从VS2017部署项目,我从远程桌面访

  • 我从这里下载了官方的OSMdroid示例。https://github.com/osmdroid/osmdroid,无法在最新的Eclipse IDE和Android SDK上编译osmdroid-android-it Android应用程序。我尝试了API 10和17。 尽管如此,osmdroid-android-it项目不识别src文件夹下的OSMDROID库。 我需要的是自定义MBTiles

  • 2. 项目部署 本章主要介绍如何部署Camel。 首先,介绍Vagrant这个虚拟机工具。借助Vagrant,我们可以保证本地开发及测试环境与线上环境的一致。 随后介绍slb-admin的部署。管理端本地也要安装Dengine,用以测试Nginx配置文件的语法是否正确。此外,还需要部署数据库:MySQL及MongoDB。 最后介绍Nginx服务器的部署。我们可以根据具体需求部署Nginx集群,每台

  • 描述 本文档提供了 3 种部署方式,对应 Jboot 里的 3 种打包方式。 通过 脚本 运行 在 打包方式 文档中,我们可以把项目打包成一个 .zip 的压缩包项目,里面带有 jboot.sh (和 jboot.bat) 执行脚本, 只需要我们解压 .zip 压缩文件,通过如下命令就可以对 jboot 项目进行启动和停止。 # 启动 ./jboot.sh start # 停止 ./jboot.

  • 部署中,你可以先构建打包生成环境代码,再启动服务。因此,构建和启动分为下面两条命令: next build next start 例如,使用now去部署package.json配置文件如下: { "name": "my-app", "dependencies": { "next": "latest" }, "scripts": { "dev": "next",