IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Discussion :

Exécuter un fichier Kermeta à partir d'un programme Java


Sujet :

Eclipse

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Exécuter un fichier Kermeta à partir d'un programme Java
    Bonjour,

    J'ai développé une transformation en Kermeta qui génère un fichier xmi.

    Mon problème est que j'aimerais exécuter cette transformation (fichier .kmt) en arrière plan, c'est-à-dire à partir d'un programme Java indépendamment d'Eclipse.

    J'ai essayé beaucoup de code mais toujours sans résultat.

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour
    la méthode dépend de plusieurs paramètres :
    • quelle version de Kermeta utilisez vous (V1.x interprété ou V2.x compilé ?)
    • quel mode de lancement/deploiement voulez vous ?
      (application standalone (ie. pure java sans eclipse) ou plugin eclipse)


    Cela est important pour savoir le code d'initialisation (différent pour chacune de ces combinaison) ainsi que pour les dépendances de classpath (l'application standalone devant avoir des dépendances vers les jar d'EMF).

    A+
    Didier

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonsoir Didier,
    Avant tout merci pour la réponse. En fait, j'utilise la version de 1.4 de kermeta sous Eclipse Juno et je veux développer une application standalone. Si tu peux me donner un exemple de programme java et toutes les dépendances nécessaires, j'en serais trop reconnaissante.
    P.S : Je rappelle que je dispose d'un fichier kmt (la transformation), deux méta-modèles (.ecore) et un modèle (.xmi) (conforme à l'un des deux méta-modèles) et je veux générer un autre modèle (.xmi).

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Il existe une version prépackagée de la 1.4.0 pour être en standalone :
    elle est téléchargeable depuis https://gforge.inria.fr/frs/?group_id=32

    elle comprend le contenu des même jars que ceux installés dans Eclipse:
    fr.irisa.triskell.traceability.model_*.jar
    fr.irisa.triskell.kermeta_*.jar
    fr.irisa.triskell.kermeta.io_*.jar
    org.kermeta.io.loader_*.jar
    org.kermeta.merger_*.jar
    fr.irisa.triskell.kermeta.model_*.jar
    fr.irisa.triskell.kermeta.interpreter_*.jar
    org.eclipse.emf.ecoretools.registration_*.jar
    fr.irisa.triskell.eclipse.util_*.jar
    org.kermeta.log4j.util_*.jar

    org.eclipse.gymnast.runtime.core_*.jar
    ainsi que ceux d'EMF et autre lib externes (voir la liste https://gforge.inria.fr/scm/viewvc.p.../?root=kermeta )


    pour le démarrage en ligne de commande il faut soit utiliser ou bien s'inspirer de https://gforge.inria.fr/scm/viewvc.p.../?root=kermeta et la classe RunCommandLigne.java
    c'est une interface d'appel en ligne de commande qui du coup sait faire les bonnes initialisations d'EMF pour se substituer à Eclipse


    Pour info, l'exemple logo fourni avec Kermeta dans Eclipse fourni un exemple d'appel pour une intégration d'un programme Kermeta dans un plugin Eclipse, rien n’empêche de le démarrer dans un thread ou un job séparé même s'il s'exécute depuis Eclipse.

    A+
    Didier

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour Didier,
    merci pour la réponse qui m'a été énormément utile. J'ai suivi tes instructions mais en exécutant la classe RunCommandLine je me suis tombée sur l'erreur suivante :
    Exception in thread "main" fr.irisa.triskell.kermeta.error.KermetaInterpreterError: Cannot run invalid kermeta program. First error is : File platform:/resource/com.kermeta.standalone/src/kermeta/TM2AM.kmt does not exist.
    at org.kermeta.interpreter.helper.RunnerHelper.getKermetaUnitToExecute(Unknown Source)
    at org.kermeta.interpreter.api.Interpreter.calculateKermetaUnit(Unknown Source)
    at org.kermeta.interpreter.api.Interpreter.<init>(Unknown Source)
    at launcher.kermeta.RunCommandLine.init(RunCommandLine.java:261)
    at launcher.kermeta.RunCommandLine.execute(RunCommandLine.java:241)
    at launcher.kermeta.RunCommandLine.main(RunCommandLine.java:235)
    Saurais-tu m'aider à résoudre cette exception ?

    Merci d'avance.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    c'est parce qu'en mode standalone il faut indiquer à quoi correspondent les url de type "platform:/plugin" et "platform:/resource" qui sont en fait des url gérées habituellement par eclipse (et qui ne veulent rien dire sinon ...)

    Il doit y avoir une option dans RuncommandLine qui permet de donner ce role à un répertoire local.

    Alternativement tu peux "précompiler" les kmt en un modèle km (click droit sur le kmt principal, gnéré&rer km en cochant la boite "isExecutable") et donner ce modèle en entrée du Runcommandline

    A+
    Didier

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour Didier,

    Excuse-moi si je commence à te déranger mais je dois vraiment résoudre ce problème. En fait j'ai essayé les deux solutions que tu m'as données.
    Pour l'option dans RunCommandLine, c'est -PlatformMapping, je l'ai ajouté dans la liste des arguments mais malheureusement elle m'a donné une autre exception :
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at
    ...
    at org.kermeta.kermetaunitloader.AbstractLoader.load(Unknown Source)
    at org.kermeta.io.cachemanager.KermetaUnitStore.get(Unknown Source)
    at org.kermeta.io.cachemanager.KermetaUnitStore.get(Unknown Source)
    at org.kermeta.interpreter.helper.RunnerHelper.getKermetaUnitToExecute(Unknown Source)
    at org.kermeta.interpreter.api.Interpreter.calculateKermetaUnit(Unknown Source)
    at org.kermeta.interpreter.api.Interpreter.<init>(Unknown Source)
    at launcher.kermeta.RunCommandLine.init(RunCommandLine.java:262)
    at launcher.kermeta.RunCommandLine.execute(RunCommandLine.java:242)
    at launcher.kermeta.RunCommandLine.main(RunCommandLine.java:236)
    Caused by: fr.irisa.triskell.kermeta.exporter.ecore.KM2ECoreConversionException: Ecore2KM exception : instance type is null for 'org.eclipse.emf.ecore.util.FeatureMap'
    at fr.irisa.triskell.kermeta.loader.ecore.ecore2km.Ecore2KMPass2.visit(Unknown Source)
    ... 62 more
    (c'est une partie de l'exception, c'est encore plus long)

    Pour la deuxième solution, j'ai précompilé le fichier kmt en un modèle km que j'ai passé en argument à RunCommandLine avec l'option -PlatformMapping mais aussi j'ai rencontré une autre exception :
    Exception in thread "main" java.lang.NoClassDefFoundError: fr/irisa/triskell/kermeta/util/LogConfigurationHelper
    at org.kermeta.io.loader.plugin.LoaderPlugin.<clinit>(LoaderPlugin.java:50)
    at org.kermeta.merger.Merger.processInMemory(Merger.java:142)
    at org.kermeta.merger.Merger.processInMemory(Merger.java:138)
    at ...
    at launcher.kermeta.RunCommandLine.init(RunCommandLine.java:262)
    at launcher.kermeta.RunCommandLine.execute(RunCommandLine.java:242)
    at launcher.kermeta.RunCommandLine.main(RunCommandLine.java:236)
    Caused by: java.lang.ClassNotFoundException: fr.irisa.triskell.kermeta.util.LogConfigurationHelper
    at ...
    et malheureusement je ne trouve pas le plugin fr.irisa.triskell.kermeta.util dans la repertoire plugins.

    Merci d'avance
    Nadia

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/05/2011, 01h13
  2. Exécuter une application Java à partir d'un programme Java
    Par provirus dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 11/02/2009, 16h52
  3. Réponses: 1
    Dernier message: 27/01/2008, 07h23
  4. Compiler des fichier java, mais à partire d'un programme Java.
    Par Djobird dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 06/11/2007, 22h44
  5. Réponses: 3
    Dernier message: 25/04/2006, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo