java - Drools 中不支持 Java 7 ("RuntimeDroolsException: value ' 1. 7' is not a valid language level")

标签 java drools java-7 rule-engine

当我将我的项目移动到 java7 时,Drools 在初始化过程中开始抛出 RuntimeDroolsException 异常。当我进一步挖掘时,我发现这是在验证 Java 方言时发生的。

问题是:Drools 5.1.1 将“java.version”系统属性与 LANGUAGE_LEVELS 进行比较以验证它。 LANGUAGE_LEVELS 是 1.6 之前的 java 版本的硬编码列表

In org.drools.rule.builder.dialect.java.JavaDialectConfiguration,
public static final String[]        LANGUAGE_LEVELS = new String[]{"1.5", "1.6"};

我不想更改源代码。所以我添加了以下内容作为绕过 java 方言验证的解决方法。

Properties properties = new Properties();
properties.setProperty( "drools.dialect.java.compiler.lnglevel","1.6" );
PackageBuilderConfiguration cfg =
new PackageBuilderConfiguration( properties );
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(cfg);

除了编辑源代码之外,还有其他更好的方法吗?

P.S: Drools 5.1.1 是 drools 的最新生产版本

最佳答案

当你还想使用Drools 5.1.1时(切换到更高版本并不总是那么容易,因为规则不再编译),这可能是另一种非编程解决方法。

META-INF/drools.packagebuilder.conf您可以添加这些属性:

 drools.dialect.java.compiler = ECLIPSE 
 drools.dialect.java.lngLevel = 1.6 
 drools.dialect.java.compiler.lnglevel = 1.6

关于java - Drools 中不支持 Java 7 ("RuntimeDroolsException: value ' 1. 7' is not a valid language level"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837663/

相关文章:

java - Drools 规则引擎流程

java - Java 7当前的Lambda提议的复杂性? (2010年8月)

java - 在 getAudioInputStream() 期间标记/重置异常

java - 动画岩石无法正确生成

java - 安卓穿戴: bluetooth vs wifi connection

drools - 从 java Util 类中调用 drool 或静态方法中的 "function"哪个更好

java - "if then else "使用规则引擎

java.rmi.server.codebase 在 linux 上不工作

java - 使用 Guice 框架编写基于注释的方法拦截器时无法注入(inject) java 对象

java - 通过 XML 将属性注入(inject) Spring Rest Controller