1

我正在尝试运行我在网上找到的用于猫头鹰本体推理的 java 程序的简单示例。它使用owl api和hermit reasoner。所以我添加了 org.semanticweb.HermiT 和 owlapi-osgidistribution-4.0.2 库。我仍然得到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/inject/Provider
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at obligation.Obligation.main(Obligation.java:43)
Caused by: java.lang.ClassNotFoundException: com.google.inject.Provider
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 25 more
Java Result: 1

我在stackoverflow上的一个类似问题中发现解决方案是

你错过了番石榴罐。对于 OWLAPI 4.0.2,您还需要 maven 依赖项中包含的所有其他 jar。如果您无法使用 Maven 构建代码,则需要确保手动添加所有依赖项。

我在我的项目中添加了番石榴罐,但我没有设法解决问题。另外我真的不知道 maven 依赖项中包含的所有 jar 是什么。你能帮我解决这个问题吗?

4

2 回答 2

2

您可以使用 maven 进行构建,也可以使用以下快捷方式:下载 owlapi-osgidistribution jar 文件并解压缩;您会在其中找到一个 lib 文件夹,其中包含所有必要的 jar。

于 2015-10-07T16:01:13.363 回答
0

ClassNotFoundException告诉您缺少的课程是com.google.inject.Provider. 这个类在 Guice 中,而不是 Guava,所以你需要将 Guice jar 添加到你的项目中。

正如您所发现的,并且正如 fge 所提到的,这又需要 JSR-330 jar javax.injectjavax.inject.Provider所在的位置。

于 2015-10-07T10:39:04.060 回答