2010-09-15 26 views
2

Je travaille sur un projet EMF dans lequel j'ai créé un modèle ecore à partir d'un fichier mdl. J'ai créé le fichier gencore correspondant et généré le code à partir du fichier gencore. Alors que EMF possède un propre mécanisme de sérialisation basé sur XMI, je veux soutenir mon projet avec un mécanisme de sérialisation propre. Jusqu'à présent, j'ai fait les étapes nécessaires et si j'utilise le débogueur, les méthodes correspondantes sont appelées. Pour lire et écrire une représentation de mon modèle, je veux utiliser une bibliothèque externe. Je l'ai fait les étapes suivantesException NoClassDefFoundError lors de l'utilisation de la bibliothèque externe dans le projet plugin EMF

  1. créé un répertoire lib/dans mon projet de plug-in où j'ai mis la bibliothèque externe
  2. Ajouté la bibliothèque sur le chemin de la construction du projet
  3. Ajouté le répertoire le faisceau-classpath (Manifest.mf)
  4. ajouté le répertoire aux bin.includes des build.properties

Si je tente d'exécuter mon code, je reçois une exception NoClassDefFoundError et je ne sais pas pourquoi . J'ai créé une configuration d'exécution dans laquelle je démarre le projet sous la forme d'une application éclipse. Alors quelqu'un a une idée de ce qui me manque?

Merci d'avance!
Michael

Edit: Voici mon fichier 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 

et aussi mes 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 

Répondre

1

Ce n'est pas vraiment une solution à cent pour cent car je ne suis pas au courant de ce que le problème était du tout. J'ai trouvé un lien où quelqu'un avait exactement le même problème (a ajouté un pot comme bibliothèque, exception NoClassDefFoundError pendant l'exécution). Jusqu'à présent, les mesures nécessaires sont:

  1. importation JARs à l'aide de la "Importer -> Système de fichiers"
  2. Ajouter le fichier JAR (s) à la section classpath de l'onglet d'exécution Manifest/plugin.xml
  3. Appuyez sur "Nouveau ..." pour ajouter ".« Retournez à la classpath
  4. Vérifiez que la construction binaire exporte le nouveau fichier JAR (s) dans l'onglet Build
  5. Appuyez sur Enregistrer
  6. Sélectionnez le projet coressponding dans l'explorateur de projet, faites un clic droit et sélectionnez » Outils PDE -> Mettre à jour le chemin de classe "Ceci ajoutera le (s) fichier (s) JAR ajouté (s) au chemin de classe du projet

J'ai eu quelques problèmes avec la dernière étape depuis que j'ai ajouté la bibliothèque par moi-même. Lorsque je l'ai fait, cette éclipse a supprimé la bibliothèque du chemin de compilation lors de l'exécution de la commande "Update classpath". g la bibliothèque au chemin de construction par moi-même et cela fonctionne maintenant.

Cela me semble un peu étrange, mais cela fonctionne maintenant. En tout cas je voudrais vous remercier pour votre aide!

Cordialement, Michael

0

Si vous écrivez des plugins Eclipse et pas simplement vieux projet Java, vous devez ajouter votre bibliothèque dans le champ classpath de l'onglet Runtime de l'éditeur Manifest.mf.

+0

Salut Manuel, j'ai ajouté la bibliothèque (vous ne pouvez ajouter des répertoires) dans le champ classpath sur l'onglet d'exécution (étape 3 dans mon post original) qui crée un faisceau-classpath d'entrée dans le fichier. J'ai jeté un oeil sur l'onglet de construction et ajouté la bibliothèque, mais cela ne change rien du tout. –

+0

Qu'est-ce que la classe eclipse se plaint de NoclassDefFoundError? Lancez-vous votre code en tant qu'application Eclipse ou application Java? Vous n'avez pas à faire l'étape 2 de votre question parce que vous écrivez un plugin. –

+0

Je lance le code en tant qu'application eclipse. La classe dont il se plaint est OWLOntologyManager qui fait partie de la bibliothèque OWL-API. Il y a une initialisation dans la méthode doSave et doLoad dans la première ligne des deux méthodes. J'ai construit un projet de test où j'utilise la bibliothèque et tout fonctionne bien (donc, ce n'est pas un problème avec la bibliothèque elle-même). J'ai également essayé (en tant que test) d'utiliser une autre classe de la bibliothèque qui provoque la même exception. –

0

Obtenez-vous le NoClassDefFoundError lorsque vous essayez d'accéder à la lib ou lorsque vous essayez d'accéder au modèle Ecore? Si c'est le dernier cas, vérifiez si votre paquet emf a été enregistré dans le fichier plugin.xml. Cherchez quelque chose comme la partie suivante:

<extension point="org.eclipse.emf.ecore.generated_package"> 
    <package 
     uri="«package URI here»" 
     class="«package class name here»" 
     genModel="«genmodel location here»"/> 
</extension> 

Cette partie peut manquer, si le plugin.xml a été produit avant l'genmodel a été utilisé pour la production, car ni le manifeste, ni le plugin.xml est mis à jour au cours de la processus de génération de code. D'un autre côté, si l'accès à la bibliothèque lève l'exception, j'essayerais de supprimer et de rajouter la dépendance, ou de nettoyer la construction d'un projet, mais cela ne semble pas pouvoir résoudre l'exception.

+0

L'exception est levée pendant que j'accède à la bibliothèque. –