Dependency issue creating SWRL Rule with SWRL API using gradle

228 Views Asked by At

I am trying to add a SWRL rule to my Ontology using SWRLAPI and OWLAPI. I am trying to use OWLAPI's version which is compatible with SWRLAPI. However, I still get errors when creating a rule. It seems to be a problem with the dependency management. I am using gradle as a dependency manager so this should have solved the issue.

The Exception is:

Error creating rule engine Drools. Exception: java.lang.NoClassDefFoundError. Message: org/drools/runtime/rule/AgendaFilter"

My build.gradle dependency file:

dependencies {
    compile group: 'net.sourceforge.owlapi', name: 'owlapi-distribution', version: '4.1.3'
    compile group: 'net.sourceforge.owlapi', name: 'org.semanticweb.hermit', version: '1.4.1.513'
    compile 'edu.stanford.swrl:swrlapi:2.0.5'
    compile 'edu.stanford.swrl:swrlapi-drools-engine:2.0.5'
}

The exception happens when executing createSWRLRuleEngine method:

public void addNewSWRLRule(SWRLRuleModel rule) throws SWRLBuiltInException, SWRLParseException {    
    SWRLRuleEngine swrlRuleEngine = SWRLAPIFactory.createSWRLRuleEngine(ontology);
    swrlRuleEngine.infer();
    swrlRuleEngine.createSWRLRule(rule.getName(), rule.getRule(), rule.getComment(), true);
}

Is there a dependency that must be added manually to solve this issue?

2

There are 2 best solutions below

3
Bruno Pessanha On BEST ANSWER

The problem was that there were 2 maven dependencies from Drools Engine (edu.stanford.swrl:swrlapi-drools-engine:2.0.5) not resolved by gradle.

The missing dependencies were:

  • org.drools:knowledge-api:6.5.0.Final
  • org.drools:drools-osgi-integration:6.5.0.Final

I am not sure what is causing these not to be solved by gradle, but I managed to fix the issue in IntelliJ by converting the two missing dependencies to a Repository Library and searching for these in maven following these steps:

  1. File > Project Structure > Libraries
  2. Right button click on the missing library
  3. Convert to Repository Library
  4. Type the dependency name and search in maven repository
  5. Replace
1
Ignazio On

You're using HermiT 1.4.1.513. That's compatible with owlapi 5, not 4 (the patch number matches the owlapi version). Use HermiT 1.3.8.413.