在Drools中不支持Java 7("RuntimeDroolsException:value'1.7'不是有效的语言级别")

Bal*_*ala 5 java rule-engine drools java-7

当我将项目移动到java7时,Drools在init进程中开始抛出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"};
Run Code Online (Sandbox Code Playgroud)

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

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

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

PS:Drools 5.1.1是drools的最新生产版本

小智 6

当您仍想使用时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
Run Code Online (Sandbox Code Playgroud)


Bal*_*ala 3

此问题已在 5.2.1.FINAL 版本中修复

https://issues.jboss.org/browse/JBRULES-3163