我正在开发一个EMF项目,我从mdl文件创建了一个ecore模型。我创建了相应的gencore文件并从gencore文件生成代码。虽然EMF有一个基于XMI的自己的序列化机制,但我想用自己的序列化机制来支持我的项目。
到目前为止,我已经完成了必要的步骤,如果我使用调试器,则会调用相应的方法。为了读取和写入我的模型的文件表示,我想使用外部库。我已完成以下步骤
如果我尝试运行我的代码,我会得到一个NoClassDefFoundError异常,我不知道为什么。我已经创建了一个运行配置,我将该项目作为eclipse应用程序启动。所以有人知道我错过了什么?
提前致谢!
迈克尔
编辑:在我的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
答案 0 :(得分:1)
这不是百分之百的解决方案,因为我根本不知道究竟是什么问题。我找到了一个链接,其中有人有完全相同的问题(在执行期间添加了一个jar作为库,NoClassDefFoundError异常)。到目前为止,必要的步骤是:
自从我将库自己添加到项目的构建路径以来,我在最后一步遇到了一些麻烦。每次我执行此操作时,eclipse都会在执行“Update classpath命令”时从构建路径中删除库。我已经重复了第六步而没有将库添加到构建路径中,而且它现在正在工作。
对我来说似乎有点奇怪,但它现在正在发挥作用。无论如何,我想感谢你的帮助!
此致 迈克尔
答案 1 :(得分:0)
如果您正在编写Eclipse插件而不是普通的旧Java项目,则必须在Manifest.mf编辑器的Runtime选项卡的classpath字段中添加库。
答案 2 :(得分:0)
在尝试访问lib或尝试访问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>
如果在使用genmodel生成之前生成了plugin.xml,则可能会丢失此部分,因为在代码生成过程中,清单和plugin.xml都不会更新。
另一方面,如果库访问会抛出异常,那么我会尝试删除并重新添加依赖项,或者清理构建项目,但这些似乎不太可能解决异常。