У меня возникли проблемы с составлением проекта drools 4. Я получаю ошибки в файле правил, говоря
Only a type can be imported. <<MyClassName>> resolves to a package
Инкрементный компилятор не работает из-за этого. Как исправить ошибки или заставить затмение игнорировать их?
Хммм, я очистил проект и решил проблему.
Эта проблема была упомянута для перехода из слюни от 3.06 до 4.0.7, поэтому какую версию eclipse и drools вы используете?
Это может быть связано с проблемой classpath:
Используя отладчик, я понял, что Drools
PackageBuilder
попытался загрузить классы из
Thread.currentThread().getContextClassLoader();
Этот
ClassLoader
не содержит мои классы агентов! Даже загрузчик системного класса не содержит мои классы.
Решение:
Вместо создания простых экземпляров
PackageBuilder
иRuleBase
необходимо создать их с помощьюPackageBuilderConfiguration
иRuleBaseConfiguration
с настроенным текущимClassLoader
:
ClassLoader classLoader = this.getClass().getClassLoader();
PackageBuilderConfiguration configuration = new PackageBuilderConfiguration();
configuration.setClassLoader(classLoader);
PackageBuilder builder = new PackageBuilder(configuration);
builder.addPackageFromDrl(source);
RuleBaseConfiguration ruleBaseConfiguration = new RuleBaseConfiguration();
ruleBaseConfiguration.setClassLoader(classLoader);
ruleBase = RuleBaseFactory.newRuleBase(ruleBaseConfiguration);
ruleBase.addPackage(builder.getPackage());
Убедитесь, что MyClassName или любые другие классы (классы), которые вы используете из правила, находятся в файле jar, а файл jar находится в пути к классам.