当我将项目移动到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的最新生产版本
答案 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版本中修复
答案 2 :(得分:0)
我通过用5.4.0.Final版本替换我引用的drools-complier.jar解决了上述问题。我试过这个jar的早期版本但是导致了同样的错误。可以从drools maven repo
下载此更新的jar答案 3 :(得分:-2)
最好的方法是向项目本身提交补丁并帮助他们支持Java 7,然后在可用时升级到该版本。