Я использую правила Drools (5.5.0) в своем проекте Java (управляемый с помощью maven 2.2.1). Он отлично работает в Java 6 (1.6.0_45), но когда я перехожу на Java 7 (1.7.0_51) и выполняю сборку, определенные правила выдают ошибку компиляции правила, например следующую:

Rule Compilation error : [Rule name='SampleRuleName']
    com/sample/event/rules/simple/Rule_SampleRuleName46467274.java (2:486) : Syntax error, static imports are only available if source level is 5.0
    com/sample/event/rules/simple/Rule_SampleRuleName46467274.java (2:500) : The import com.sample.event.rules.simple.TransformEvent.transformEvent cannot be resolved
    com/sample/event/rules/simple/Rule_SampleRuleName46467274.java (7:1082) : The method transformEvent(TransformedEventCallBackHandler, EventTemplate, FirmwareEvent) is undefined for the type Rule_SampleRuleName46467274

Ошибка «статический импорт доступен только в том случае, если уровень исходного кода равен 5.0» предполагает, что компилятор drools устанавливает уровень исходного кода меньше 5, но зачем ему это делать? Я обновил свой JAVA_HOME и pom.xml. Оттуда он должен забирать исходный уровень Java, верно?

0
Nachiketa 23 Май 2014 в 14:30

2 ответа

Лучший ответ

Оказывается, Drools использует компилятор Eclipse JDT для компиляции правил. Обновление версии JDT помогло. Однако, если это не поможет, обновление версии Drools также может помочь.

1
Nachiketa 29 Май 2014 в 18:10
В моем случае мой проект pom.xml жестко запрограммировал зависимость org.eclipse.jdt.core.compiler:ecj от версии 4.3.1. После обновления drools до новейшей версии 7.13.0.Final я получил аналогичную ошибку (при первом запуске «кода drools», странно). После удаления жестко закодированной зависимости org.eclipse.jdt.core.compiler:ecj в моем pom.xml (просто позволяя слюням решать, какую версию ecj, т.е. 4.6.1, использовать), эта ошибка исправлена.
 – 
Hong
7 Янв 2019 в 12:14

При обновлении до Drools 6 эта проблема исправлена. Недавно у нас была аналогичная проблема для Java 8 с Drools 6.0, и она исправлена ​​в 6.1 (и в последних версиях 6.0 тоже).

Причина появления java 8 заключалась в том, что слюни распознают версии java 1.6, 1.7, но не 1.8, в этот момент по умолчанию используется 1.6. Я подозреваю, что слюни 5.5 (которая устарела) имели ту же проблему для java 7.

1
Geoffrey De Smet 23 Май 2014 в 14:40
Кажется, это не помогает. Имеет ли значение используемая версия maven/jdt?
 – 
Nachiketa
28 Май 2014 в 11:36
Да, я был прав. Это была версия JDT, которая вызывала проблему. Решено. Спасибо за помощь!
 – 
Nachiketa
29 Май 2014 в 18:01