2

我正在做一个 EMF 项目,我从 mdl 文件创建了一个 ecore 模型。我创建了相应的 gencore 文件并从 gencore 文件生成了代码。虽然 EMF 有自己的基于 XMI 的序列化机制,但我想用自己的序列化机制来支持我的项目。

到目前为止,我已经完成了必要的步骤,如果我使用调试器,则会调用相应的方法。为了读取和写入我的模型的文件表示,我想使用外部库。我已经完成了以下步骤

  1. 在我放置外部库的插件项目中创建了一个目录 lib/
  2. 将库添加到项目的构建路径中
  3. 将目录添加到 bundle-classpath (Manifest.mf)
  4. 将目录添加到 build.properties 的 bin.includes

如果我尝试运行我的代码,我会得到一个 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
4

3 回答 3

1

这并不是百分百的解决方案,因为我根本不知道问题到底出在哪里。我找到了一个链接,其中有人遇到了完全相同的问题(添加了一个 jar 作为库,执行期间出现 NoClassDefFoundError 异常)。到目前为止,必要的步骤是:

  1. 使用“导入 -> 文件系统”导入 JAR
  2. 将 JAR 文件添加到 Manifest/plugin.xml 运行时选项卡的类路径部分
  3. 按“新建...”添加“。” 库回到类路径
  4. 检查二进制构建是否在构建选项卡上导出了新的 JAR 文件
  5. 按保存
  6. 在项目资源管理器视图中选择对应的项目,右键单击并选择“PDE Tools -> Update classpath”。这会将新添加的 JAR 文件添加到项目的类路径中。

自从我自己将库添加到项目的构建路径中以来,我在最后一步遇到了一些麻烦。每次我执行此 Eclipse 时,都会在执行“更新类路径命令”时从构建路径中删除该库。我已经重复了第六步,但没有自己将库添加到构建路径中,现在它正在工作。

这对我来说似乎有点奇怪,但它现在正在工作。无论如何,我要感谢您的帮助!

问候,迈克尔

于 2010-09-15T14:58:15.407 回答
0

如果您正在编写 Eclipse 插件而不是普通的旧 Java 项目,则必须将库添加到 Manifest.mf 编辑器的运行时选项卡的类路径字段中。

于 2010-09-15T11:51:25.427 回答
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 在代码生成过程中都不会更新。

另一方面,如果访问的库抛出异常,那么我会尝试删除并重新添加依赖项,或者清理构建项目,但这些似乎不太可能解决异常。

于 2010-09-15T13:00:42.217 回答