Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在EMF插件项目中使用外部库时出现NoClassDefFoundError异常_Java_Eclipse_Osgi_Eclipse Emf - Fatal编程技术网

Java 在EMF插件项目中使用外部库时出现NoClassDefFoundError异常

Java 在EMF插件项目中使用外部库时出现NoClassDefFoundError异常,java,eclipse,osgi,eclipse-emf,Java,Eclipse,Osgi,Eclipse Emf,我正在做一个EMF项目,我从mdl文件创建了一个ecore模型。我创建了相应的gencore文件,并从gencore文件生成了代码。虽然EMF有自己的基于XMI的序列化机制,但我想用自己的序列化机制来支持我的项目 到目前为止,我已经完成了必要的步骤,如果使用调试器,将调用相应的方法。为了读取和写入模型的文件表示形式,我希望使用外部库。我已经完成了以下步骤 在我的插件项目中创建了一个目录lib/,我在其中放置了外部库 将库添加到项目的生成路径 将目录添加到包类路径(Manifest.mf) 已将目

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

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

  • 在我的插件项目中创建了一个目录lib/,我在其中放置了外部库
  • 将库添加到项目的生成路径
  • 将目录添加到包类路径(Manifest.mf)
  • 已将目录添加到build.properties的bin.includes
  • 如果我试图运行我的代码,我会得到一个NoClassDefFoundError异常,我不知道为什么。我已经创建了一个运行配置,在这里我将作为eclipse应用程序启动项目。有人知道我错过了什么

    提前谢谢
    迈克尔

    编辑:在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异常)。到目前为止,必要的步骤包括:

  • 使用“导入->文件系统”导入JAR
  • 将JAR文件添加到Manifest/plugin.xml运行时选项卡的classpath部分
  • 按“新建…”将“.”库添加回类路径
  • 检查二进制构建是否在build选项卡上导出新的JAR文件
  • 按保存
  • 在project explorer视图中选择Coresponding项目,右键单击并选择“PDE工具->更新类路径”。这将把新添加的JAR文件添加到项目的类路径中
  • 自从我自己将库添加到项目的构建路径后,我在最后一步遇到了一些问题。每次我这样做时,eclipse都会在执行“updateclasspath命令”时从构建路径中删除库。我已经重复了第六步,但没有亲自将库添加到构建路径中,现在它开始工作了

    这对我来说似乎有点奇怪,但它现在起作用了。无论如何,我要感谢你的帮助

    问候,,
    Michael

    Hi Manuel,我已经在运行时选项卡的类路径字段中添加了库(您只能添加目录)(我的原始帖子中的步骤3),它在文件中创建了条目捆绑类路径。我已经查看了build选项卡并添加了库,但这并没有改变任何东西?您是以Eclipse应用程序还是java应用程序的形式启动代码?您不必执行问题的第2步,因为您编写了一个插件。我将以eclipse应用程序的形式启动代码。它抱怨的类是OWL-API库的一部分OWLOntologyManager。在这两种方法的第一行doSave和doLoad方法中都有一个初始化。我已经建立了一个测试项目,在那里我使用了这个库,一切都很好(所以,它本身没有问题)。我还尝试(作为测试)使用库中的另一个类,该类会导致相同的异常。该异常是在我访问库时引发的。