Java 在EMF插件项目中使用外部库时出现NoClassDefFoundError异常
我正在做一个EMF项目,我从mdl文件创建了一个ecore模型。我创建了相应的gencore文件,并从gencore文件生成了代码。虽然EMF有自己的基于XMI的序列化机制,但我想用自己的序列化机制来支持我的项目 到目前为止,我已经完成了必要的步骤,如果使用调试器,将调用相应的方法。为了读取和写入模型的文件表示形式,我希望使用外部库。我已经完成了以下步骤Java 在EMF插件项目中使用外部库时出现NoClassDefFoundError异常,java,eclipse,osgi,eclipse-emf,Java,Eclipse,Osgi,Eclipse Emf,我正在做一个EMF项目,我从mdl文件创建了一个ecore模型。我创建了相应的gencore文件,并从gencore文件生成了代码。虽然EMF有自己的基于XMI的序列化机制,但我想用自己的序列化机制来支持我的项目 到目前为止,我已经完成了必要的步骤,如果使用调试器,将调用相应的方法。为了读取和写入模型的文件表示形式,我希望使用外部库。我已经完成了以下步骤 在我的插件项目中创建了一个目录lib/,我在其中放置了外部库 将库添加到项目的生成路径 将目录添加到包类路径(Manifest.mf) 已将目
迈克尔 编辑:在my Manifest.mf文件下面
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: de.hs_rm.cs.vs.dsm.OWL
Bundle-SymbolicName: de.hs_rm.cs.vs.dsm.owl;singleton:=true
Bundle-Version: 1.0.0
Bundle-ClassPath: lib/,
.
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Export-Package: owl,
owl.impl,
owl.util,
rdfs,
rdfs.impl,
rdfs.util
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.emf.ecore;visibility:=reexport
Bundle-ActivationPolicy: lazy
还有我的build.properties
bin.includes = .,\
model/,\
META-INF/,\
plugin.xml,\
plugin.properties,\
lib/
jars.compile.order = lib/,\
.
source.. = src/
output.. = bin/
source.lib/ = lib/
jars.extra.classpath = lib/owlapi-bin.jar
如果您正在编写Eclipse插件,而不是普通的旧Java项目,则必须在Manifest.mf编辑器的Runtime选项卡的classpath字段中添加库。在尝试访问库或尝试访问Ecore模型时,是否会出现NoClassDefFoundError?如果是后一种情况,请检查emf包是否已在plugin.xml文件中注册。查找类似以下部分的内容:
<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri="«package URI here»"
class="«package class name here»"
genModel="«genmodel location here»"/>
</extension>
如果plugin.xml是在genmodel用于生成之前生成的,则此部分可能会丢失,因为在代码生成过程中,清单和plugin.xml都不会更新
另一方面,如果库访问引发异常,那么我会尝试删除并重新添加依赖项,或者清理构建项目,但这些似乎不太可能解决异常。这并不是百分之百的解决方案,因为我根本不知道到底是什么问题。我发现了一个链接,其中有人遇到了完全相同的问题(添加了一个jar作为库,执行期间出现NoClassDefFoundError异常)。到目前为止,必要的步骤包括:
MichaelHi Manuel,我已经在运行时选项卡的类路径字段中添加了库(您只能添加目录)(我的原始帖子中的步骤3),它在文件中创建了条目捆绑类路径。我已经查看了build选项卡并添加了库,但这并没有改变任何东西?您是以Eclipse应用程序还是java应用程序的形式启动代码?您不必执行问题的第2步,因为您编写了一个插件。我将以eclipse应用程序的形式启动代码。它抱怨的类是OWL-API库的一部分OWLOntologyManager。在这两种方法的第一行doSave和doLoad方法中都有一个初始化。我已经建立了一个测试项目,在那里我使用了这个库,一切都很好(所以,它本身没有问题)。我还尝试(作为测试)使用库中的另一个类,该类会导致相同的异常。该异常是在我访问库时引发的。