2014-02-13 3 views
1

Я выполняю правило Drools через тест Mockito. Правило не работает во время выполнения сообщения об ошибке с номером строки java-файла с длинным произвольным именем. Кажется, что Drools генерирует java-файлы «на лету» и вводит в JVM. Но когда я просматриваю эти файлы на своем диске, я не нахожу их. Есть ли способ сохранить их на диске?Drools доступ к сгенерированным java-файлам

+0

Что ошибка вы получаете? Если он компилирует файлы, он, вероятно, хранит их во временном месте и очищает их при завершении - так что вы их никогда не найдете. Однако ошибка должна указывать на фактический файл класса где-то в его выходе. –

+0

Это должна быть ошибка компиляции правила, а не время выполнения (время выполнения правила). Скомпилируйте файл DRL за пределами Mockito, и вы увидите сообщение об ошибке, когда вы спросите строителя о накопленных ошибках. – laune

+0

Я получаю NullPointerException, это не выглядит какой-либо ошибкой компиляции правила. –

ответ

5

Есть решение:

Вы можете сбросить Drools генерируемый Java-файлы двумя способами.

1) через командную строку:

-Ddrools.dump.dir="target/dumpDir" 

например Я использую Maven команду для выполнения правила, поэтому было бы

mvn -Ddrools.dump.dir="target/dumpDir" -Dtest=DroolsRuleTest test 

2) Через API

public class FileKnowledgeBaseFactory implements KnowledgeBaseFactory { 
    private Log log = LogFactory.getLog(FileKnowledgeBaseFactory.class); 

    public KnowledgeBase load(String drlFullFilename) { 
     KnowledgeBuilderConfiguration config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(); 
     config.setOption(DumpDirOption.get(new File("target/dumpDir"))); 

     KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(config); 

     .... 
     .... 
    } 
} 
+0

можем ли мы сделать то же самое с муравьем, как с mvn ??? –

Смежные вопросы