Ошибка при создании правила двигателя слюни
Я намеревался использовать рассуждение Openllet, как и другие доступные рассуждения. Но этот аргумент совместим только с дистрибутивом OWL API 5.XX. У меня есть файл xxx.owl, который содержит правила SWRL. Поскольку существующий SWRL API не совместим с OWL API 5, Игнацио Пальмисано любезно создал разветвленный репозиторий с необходимыми изменениями, чтобы он был совместим с дистрибутивом OWL API 5.XX. Следовательно, я удалил зависимости, связанные с API-интерфейсом SWRL и механизмом drools. Вместо этого я создал их локально, загрузив zip-файлы.
Теперь, когда файлы ".jar" API-интерфейса SWRL и Drools загружены в проект в intelliJ, я получаю следующую ошибку:
Exception in thread "main" org.swrlapi.exceptions.SWRLRuleEngineException: Error creating rule engine Drools. Exception: java.lang.NoClassDefFoundError. Message: org/drools/runtime/rule/AgendaFilter
at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:71)
at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:41)
at org.swrlapi.factory.SWRLAPIFactory.createSWRLRuleEngine(SWRLAPIFactory.java:38)
at SWRLrules.main(SWRLrules.java:61)
Caused by: java.lang.NoClassDefFoundError: org/drools/runtime/rule/AgendaFilter
at org.swrlapi.drools.core.DroolsSWRLRuleEngineCreator.create(DroolsSWRLRuleEngineCreator.java:27)
at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:59)
... 3 more
Caused by: java.lang.ClassNotFoundException: org.drools.runtime.rule.AgendaFilter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more code here
Здесь я также прикрепляю зависимости в файле pom.xml:
<dependencies>
<dependency>
<groupId>net.sourceforge.owlapi</groupId>
<artifactId>owlapi-osgidistribution</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>
<dependency>
<groupId>com.github.galigator.openllet</groupId>
<artifactId>openllet-owlapi</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.swrlapi.example.SWRLAPIExample</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.swrlapi.example.SWRLAPIExample</mainClass>
</configuration>
</plugin>
</plugins>
</build>
PS: я собрал API-интерфейс swrl и drools локально и импортировал файл jar в проект.
1 ответ
Вам не нужно удалять зависимости из файла pom (ошибка, которую вы видите, вызвана отсутствием некоторого jar в ручном процессе).
Если вы используете мою развилку swrlapi и меняете версию, скажем, на 2.0.6-SNAPSHOT, то работаете локально
mvn clean install
поместит банку 2.0.6-SNAPSHOT в ваш локальный репозиторий maven. В этот момент измените ваш pom на swrlapi 2.0.6-SNAPSHOT, и вы получите обновленную версию в своем приложении.