1

我在我的 Grails 应用程序中使用“org.springframework.boot:spring-boot-devtools”依赖项在代码更改时实时重新加载应用程序。问题是,这种依赖似乎导致了一些与流口水的冲突。

kieSession.setGlobal(name, value)我的代码中,我收到以下错误:

java.lang.RuntimeException: Illegal class for global. Expected [com.user.PersonAccount], found [com.user.PersonAccount]

删除“spring-boot-devtools”依赖项解决了这个问题,但我需要这个依赖项来进行实时重新加载,这在开发中很重要。

任何人都知道为什么这种依赖会导致这种冲突?以及我能做些什么来解决它或作为一种解决方法?

提前致谢!

4

2 回答 2

1

对于将来可能遇到相同问题的人,该问题已在之前报告和描述过:https : //issues.redhat.com/browse/DROOLS-1540 并且从版本 7.26.0.Final 开始,drools 中已包含修复程序(https://github.com/kiegroup/drools/commit/85c5308031a84a0ac4086c1df363bb1b4b3c6af9

如果您不想升级到最新版本的 drools,仍然有一种解决方法可以解决 spring-boot 的 devtools 页面上已经提到的问题(https://docs.spring.io/spring-boot/ docs/current/reference/html/using.html#using.devtools.restart.customizing-the-classload)。我添加了 META-INF/spring-devtools.properties 以及我想包含在重启类加载器中的 jars(主要是 drools + kie jars)& 问题已解决。

于 2021-08-16T09:01:14.630 回答
0

当 devtools 重新编译该类时,字节码不再与您的规则中的字节码匹配。它并没有很好地警告你,但它想说的是“你试图给我一个 com.user.PersonAccount 实例,但它看起来不像我所知道的 com.user.PersonAccount 实例应该是这样的。”

因此,如果您坚持使用此工具来即时重新编译内容,您还需要即时重新编译和重新加载规则。或者不使用 spring-boot-devtools。

于 2021-08-13T22:39:36.157 回答