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

时间:2011-10-20 14:42:17

标签: java drools java-7 rule-engine

当我将项目移动到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"};

我不想更改源代码。所以我添加了以下作为绕过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的最新生产版本

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

这已在5.2.1.FINAL版本中修复

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

答案 2 :(得分:0)

我通过用5.4.0.Final版本替换我引用的drools-complier.jar解决了上述问题。我试过这个jar的早期版本但是导致了同样的错误。可以从drools maven repo

下载此更新的jar

答案 3 :(得分:-2)

最好的方法是向项目本身提交补丁并帮助他们支持Java 7,然后在可用时升级到该版本。