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

Langage Java Discussion :

Créer une classe .java avec un code java


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut Créer une classe .java avec un code java
    Bonjour tout le monde,

    Je voulais pouvoir générer une classe java à l'aide d'un code écrit en java. J'ai alors trouvé un API antlr-2.7.5 et JAVACodeGenST qu'un ami m'a donné. Seulement il n'y a pas de tuto. Je suis quand même arrivé à générer les class et à mettre des instructions dedans.

    Ce que je n'arrive pas c'est de mettre des choses comme extends unclasse, ou encore générer une interface au lieu d'une class.

    Quelqu'un a t il une idée ou d'autres APIs plus simples.

    merci et bonne année 2008.

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    et bien tu as javac pour compiler et creer ta classe.

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Je ne suis pas sur d'avoir compris ta question. Tu souhaite compiler une fichier ".java" en fichier ".class" tout comme le fait javac depuis un programme java? C'est pour quel usage?

    Je ne connais pas l'API que tu cite mais, il y a (seulement depuis java SE 6.0 il me semble) dans l'API standard des outils pour faire de la compilation JAVA depuis un autre programme JAVA dans le package javax.tools.
    Sinon il y a aussi la possibilité de faire un Runtime.exec("javac MonFichier.java");

    Tout dépends de tes besoins, je ne suis pas sur que tu ais assez clairement explicité on problème pour donner une réponse plus précise

  4. #4
    azr
    azr est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Par défaut
    Moi non plus je ne sais pas si je t'ai bien compris.. Pour moi tu veux générer un fichier .java à partir d'un autre .java
    Si c'est bien ça, tout dépend de la complexité de l'implémentation que tu as à générer, mais pourquoi pas ne pas utiliser juste un petit StringBuffer?

    Cela te donne la possibilité de créer interfaces ou classes selon les besoins.
    Après c'est sûr qu'il doit y avoir plus élégant

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Es-tu sur de vouloir te lancer dans la génération dynamique de code ? Est-ce "pour le fun" ou alors pour un réel besoin ?

    Parfois, il suffit de se créer un micro langage, de "cabler" une grammaire (c'est-à-dire coder en dur les méthodes qui reflètent les différentes parties).

    Et attention aux performances : la compilation dynamique prend du temps. De plus, les compilateurs n'acceptent qu'un fichier, et pas de flux. Donc générer le code, écrire le fichier, le compiler puis l'exécuter : c'est long. De plus, selon la complexité, générer du code peut potentiellement entraîner énormément d'erreurs. De plus, il n'est pas possible de gérer différentes version d'une class dans une JVM. Une fois compilée et utilisée, c'est trop tard pour la modifier !

    Vérifie d'abord (mais j'imagine que c'est déjà fait) si tu as réellement besoin de la compilation dynamique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut
    Bonjour tout le monde,

    Je voix bien qu'on m'a pas compris. Voici un exemple de code java qui générè un fichier .java.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    package classe;
     
    import java.io.File;
    import java.io.*;
     
    import org.antlr.stringtemplate.*;
    import javacodegenst.*;
     
    public class MaClasse {
     
    	public static void main (String [] args){
    		String nom="UneClasse";
     
    		StringTemplateGroup stcodeS=STGClass.main();
    		StringTemplate classService=stcodeS.getInstanceOf("class");
    		classService.setAttribute("package","classe"); // crée le package
    		classService.setAttribute("name",nom); // attribue le nom de la classe, donc du fichier .java
    		classService.setAttribute("ext",""); // ajoute le mot clé "Implements"
    		classService.setAttribute("nomS","Runable"); // ajoute Runable
     
    		classService.setAttribute("methods.{returnType,name,param,body}","" ,nom,"","");
     
    		StringTemplate classCorp=stcodeS.getInstanceOf("corps"); // crée le corps du programme
    		String s="String version="+"\"version 1.0 \"";
    		classCorp.setAttribute("statements", s+";\n"+"System.out.println("+"version"+");"+"\n"); // ajoute une instruction
    		classService.setAttribute("methods.{returnType,name,param,body}","void" ,"run","",classCorp); // crée la méthode run() du Thread
     
    		try {
    			String pack="classe";
    			nom=nom.substring(0,1).toUpperCase()+nom.substring(1,nom.length());
    			  File f=new File("c:\\cwsjava\\"+pack);
    			f.mkdir();
     
     
    			f=new File("c:\\cwsjava\\"+pack+"\\"+nom+".java");
    			  f.createNewFile();
    			  FileWriter fw=new FileWriter(f);
    			  fw.write(classService.toString()); // écrit le contenu dans le fichier physique  créé
    			fw.close(); 
    		}
    		catch (IOException ex) {ex.printStackTrace(System.out);}
    	}
    }
    Ce code crée dans le dossier c:\cwsjava\nomduPackage le fichier UneClasse.java

    Je ne suis pas du tout surpris de vos réponses, car je galère dessus depuis 4 mois et rien de potable.

    Ce travaille est une partie de mon mémoire de thèse, raison pour laquelle je voulais vraiment une réponse. Sans quoi, mon Directeur de thèse veut arrêter de continuer avec moi.

    Mon problème c'est que je n'arrive plus à avoir les dits APIs pour plus de detail. Si vous voulez, je pourais vous envoyer les copies des APIs.

    Merci.

  7. #7
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Si il s'agit de génerer dynamiquement une classe java (.class et non .java) tu peu utiliser bcel

    S'il s'agit de creer un fichier .java suivant un template, tu peu utiliser freeMarker

    Ensuite je n'ai pas compris complètement ce que tu désires, donc je ne peu pas t'aider plus.

  8. #8
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut
    Merci,

    je pense que freeMaker peut être la solution. Je voulais pouvoir créer

    - des .java de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public class UneClasse { 
    ....}
    - des .java de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public interface UneInterface { .....}
    - des .java de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class UneClasse extends  UneAutreClasse implements  UneInterface { .....}
    FreeMaker où avoir des tuto, APIs ?

    merci

  9. #9
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Bonsoir,
    je pense que Freemarker pourrait faire l'affaire.
    Avec Freemarker tu ecrit un template (fichier qui contient des variable Java a remplacer) qui est fusionne avec des objets Java pour donner un flux de sortie.

    Dans ton cas ca donnerais un truc du genre :

    template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface ${interfaceName} { .....}
    model Java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Map models = new HashMap();
    models.put("interfaceName","UneInterface");
    Le template et le models JAVA est ensuite fusionne avec Freemarker
    pour donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface UneInterface { .....}
    La doc Freemarker est super bien faite. Tu as un exemple de code Java ici et le template utilise dans l'exemple est ici.

    Apres si tu veux des wizards Eclipse pour lancer la generation de tes fichiers JAVA, je te propose Akrogen, le plugin de generation de code sur lequel je suis en train de bosser et qui permet d'ecrire tes wizards Eclipse en XML/XUL et de les associer à un template Freemarker (Velocity ou XSL).

    Bon courage.

    Angelo

  10. #10
    Membre émérite
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Par défaut
    je te conseille d'utiliser le truc à la mode du moment : http://www.janino.net/

    c'est simple et intuitif.

    @+
    Lionel

  11. #11
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut
    Ok, les amis je vais m'y mettre et voir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/08/2014, 11h38
  2. créer une routine d'installation pour appli java avec netbeans
    Par dummygreg dans le forum NetBeans Platform
    Réponses: 3
    Dernier message: 23/07/2009, 23h12
  3. Ecrire une page web avec du code Java.
    Par tsikpemoise dans le forum JSF
    Réponses: 2
    Dernier message: 07/11/2008, 08h45
  4. imprimer une page word avec de code java
    Par AmineDev9 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 21/09/2008, 20h38

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