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

Java Discussion :

Compiler du Java en Java


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Points : 35
    Points
    35
    Par défaut Compiler du Java en Java
    Bonjour à tous !

    Avant tout je précise que j'ai fait des recherches, mais que je n'ai pas trouvé ce dont j'ai besoin : Une façon de compiler du java à partir d'un autre programme java.
    Ce qui fait que je ne trouve pas :
    Il faut que la compilation puisse se faire sur un pc qui n'as pas le jdk (d’ailleurs le ToolProvider.getSystemJavaCompiler() me renvois null ...). J'ai bien pensé à ajouter le javac.exe, mais pour un soucis d'exportabilité ça ne conviens pas non plus.

    Je pense qu'il me faudrait un compilateur écrit lui aussi en java mais je n'en trouve pas et je ne sais pas comment le faire ni si c'est réalisable ...
    Une idée ?

  2. #2
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Sans jdk c'est pas possible
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Sisi, il est tout à fait possible d'écrire son propre compilateur Java, si on a une équipe de 10 personnes très expérimentées et environ 2 ans devant soi.

    De manière moins cynique, si j'avais vraiment ce genre de besoin délirant je regarderais si je peux pas juste inclure une grosse partie de OpenJDK dans mon projet de sorte de ne pas avoir besoin de l'installer à part. Bien sûr c'est du GPL, donc le reste du programme doit en être aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    accessoirement, javac est un compilateur java écrit en java

    Blague à part "compiler du java sur une plateforme sans compilateur" c'est du n'importe quoi comme requis. D'abord pourquoi refuser qu'un jdk arrive? Ensuite pourquoi avoir besoin de compiler?

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Une applet java qui compile un virus au dernier moment pour ceux qui viennent sur le site internet, ça simplifierait grandement la capacité de nuisance envers ceux qui n'ont rien demandé
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    EDIT2 :
    Citation Envoyé par tchize_ Voir le message
    accessoirement, javac est un compilateur java écrit en java
    Cette petite phrase m'as fait me demander ce qu'il y avais dans l'archive tools.jar, donc j'ai était voir dedans. Et effectivement, il y a le javac à l'intérieur ! J'ai testé, et après avoir supprimer plein de choses probablement inutiles, ça fonctionne en utilisant le tools.jar et non les executables. Du coups j'ai testé avec celui de solaris x86 (qui ne fait pas la même taille) sur mon windows 7 amd64 et ça a fonctionné aussi !
    Cette petite phrase m'a bien aidée, même si ce n'était apparemment pas le but xD

    Donc merci à tchize de m'avoir aidé à trouver la solution et voilà le code si quelqu'un désire faire la même chose que moi :
    Code JAVA : 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
    	public static void compile(File src, File bin)
    	{
    		try
    		{
    			final File[] inSrc = src.listFiles();
     
    			String cmd = " -d \"" + bin + "\"";
    			for (File f : src.listFiles())
    				cmd += " \"" + src.getCanonicalPath() + "\\" + f.getName() + "\"";
     
    			cmd = "java -cp tools.jar com.sun.tools.javac.Main " + cmd;
    			runProcess(cmd);
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
     
    	private static void printLines(String name, InputStream ins, PrintStream out) throws Exception
    	{
    		String line = null;
    		BufferedReader in = new BufferedReader(new InputStreamReader(ins));
    		while ((line = in.readLine()) != null)
    		{
    			out.println(name + " " + line);
    		}
    	}
     
    	private static void runProcess(String command) throws Exception
    	{
    		Process pro = Runtime.getRuntime().exec(command);
    		printLines(command + " stdout:", pro.getInputStream(), System.out);
    		printLines(command + " stderr:", pro.getErrorStream(), System.err);
    		pro.waitFor();
    		System.out.println(command + " exitValue() " + pro.exitValue());
    	}
    Dans mon tools.jar il ne me reste que ces dossiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    com
        sun
            source (et tout ce qu il contiennait)
            tools
                javac (et tout ce qu il contiennait)
    META-INF (et tout ce qu il contiennait)

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    A noter que tu ne peux pas modifier le tools.jar pour le redistribuer (cf license)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Ok, je vais essayer de mieux eplicationner =P

    Cahier des charges :
    - Mon logiciel doit être exportable.
    - Mon logiciel doit pouvoir compiler.
    - Il doit être utilisable pour des gens qui ne font pas de développement java et qui ne possèdent donc pas le JDK.

    Problème :
    Pouvoir compiler un programme sur une machine de n'importe quel OS n'intégrant pas le JDK (et donc trouver une façon d'intégrer javac à mon programme).

    Résolution :
    La solution est dans le dossier JDK/lib, il y a le "tools.jar" qui contient une class permettant la compilation en java (identique à tous les OS). Le fichier javac (javac.exe sous windows) se contente en fait de faire "java -cp ../lib/tools.jar com.sun.tools.javac.Main".
    Le fichier javac(.exe) est donc inutile, j'ai juste à lancer cette même commande grâce au Runtime.exec(cmd) en utilisant un "tools.jar" que j'ai copier/coller dans mon programme.

    Astuce :
    J'ai aussi un peu allégé mon tools.jar (chose facultative) en retirant tout ce qui ne sert pas à la class javac.Main


    EDIT :
    Citation Envoyé par tchize_ Voir le message
    A noter que tu ne peux pas modifier le tools.jar pour le redistribuer (cf license)
    Ha j'avais pas pensé à ça :s
    Je me disais que j'allais préciser que ce fichier venais du JDK, dévellopé par Oracle etc ... Le truc c'est que j'y connait rien en licence, y a pas moyen d'avoir une autorisation ou autre ?

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par DrakeRoxas Voir le message

    EDIT :

    Ha j'avais pas pensé à ça :s
    Je me disais que j'allais préciser que ce fichier venais du JDK, dévellopé par Oracle etc ... Le truc c'est que j'y connait rien en licence, y a pas moyen d'avoir une autorisation ou autre ?
    Ben non, tu ne peux pas t'amuser à décomposer comme ça un produit de oracle.

    Mais comme déjà suggéré, pourquoi tu n'intègre pas simplement le jdk dans la distribution de ton application??

    Et pourquoi tu as besoin de compiler spécifiquement du java si les personnes ne font pas de dev java? Tu peux probablement te contenter de supporter des languages de script?

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Nous somme bêtes. Pourquoi installer le JDK alors que copier/coller javac suffit ?

    DrakeRoxas, t'as essayé de faire des inclusions de librairies?
    Tu dis "ça fonctionne", mais si ça compile uniquement i=i+1, tu passes à côté de la POO donc de java.

    [PS]
    Qu'est ce que ça édite, sur ce fil de discussion!!! La conversation existe en dizaine de versions qui n'existent plus.
    Ya des jours où on aimerait que les posts ne soient plus éditables au-delà de 5 minutes.
    [/PS]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ben non, tu ne peux pas t'amuser à décomposer comme ça un produit de oracle.

    Mais comme déjà suggéré, pourquoi tu n'intègre pas simplement le jdk dans la distribution de ton application??
    Question de taille de fichier ... Mais comme dit Flodelarab, "t'as essayé de faire des inclusions de librairies?", inclure uniquement la librairie tools (même complète) ne peut pas se faire ? Parce qu'entre 3Mo pour le tools.jar allégé et 240Mo pour le jdk pour n'utiliser que le javac, ça fait une différence ...
    Et si j'inclut le jdk, je ne doit pas inclure une version en particulier (Windows x86 et Solaris SPARC 64-bit (SVR4 package) par exemple) ? Ce serai gênant d'un point de vue exportabilitée :s

    Citation Envoyé par tchize_ Voir le message
    Et pourquoi tu as besoin de compiler spécifiquement du java si les personnes ne font pas de dev java? Tu peux probablement te contenter de supporter des languages de script?
    En fait, le logiciel vas fonctionner par projets. A la création d'un projet, du code (préconçu) vas être généré pour correspondre à telle ou telle option choisi. Le résultat du projet doit être un programme exploitable même si les utilisateurs n'ont aucune connaissance en programmation. Ces codes restent quand même éditables pour ceux qui veulent un programme qui correspond plus à leurs envies sans avoir à coder le "moteur" de ce programme

    (Pour infos, le vert c'est le logiciel que je développe avec le compilateur, le bleu c'est le programme qui sera le résultat d'un projet)

    Citation Envoyé par Flodelarab Voir le message
    DrakeRoxas, t'as essayé de faire des inclusions de librairies?
    Comme je dit, j'inclut la librairie tools puisque c'est la seule qui me sert. Je l'ai allégée mais c'est juste que je n'ai pas besoin de TOUTE la librairie, donc j'ai gardé l'essentiel (et il y a encore pleiiiiiiiin de class que j'utilise pas dedans)

    Citation Envoyé par Flodelarab Voir le message
    Tu dis "ça fonctionne", mais si ça compile uniquement i=i+1, tu passes à côté de la POO donc de java.
    Pour l'instant ça compile une JDialog "Je fonctionne !" mais après ça compilera beauuuuucoup de POO des classes utilisées sans cesses par d'autre classes, qui sont elle même appelées par d'autre classes, qui elle le sont encore, etc ... Bref, c'est de la POO )

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pour moi tu peux atteindre tes objectifs avec groovy ou beanshell sans soucis. Les deux peuvent executer du pur java, avec les facilités de scripting en plus. Par exemple, bien qu'on puisse compiler du grovvy, ça peux aussi fonctionner en interprété.

    Pour les licences de la jdk, ce n'est pas bien compliqué. Quand tu télécharge le jdk, la licence t'es présentée, il "suffit" de la lire, je crois qu'elle fait à peine 50 pages

    http://www.oracle.com/technetwork/ja...nse-159167.txt

    Voir la partie "SUPPLEMENTAL LICENSE TERMS", sections B et C

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 42
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Les deux peuvent exécuter du pur java, avec les facilités de scripting en plus.
    Si je comprends bien, je peut leur passer un texte et ils l'exécuteront comme si c'était du java compilé ? Il permettent de reconnaître de nouvelles classes ?

    EDIT : Pour groovy ça n'as pas l'air de fonctionner (pas de classes internes) mais en revanche beanshell à l'air efficace ... Je regarderais plus en détail, mais en tout cas j'avais besoin de quelque chose du genre à un autre endroit de mon logiciel, merci.

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

Discussions similaires

  1. Compiler du code source java en java
    Par djmad dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 14/04/2009, 11h53
  2. Réponses: 7
    Dernier message: 26/07/2007, 10h10
  3. Compiler du Java depuis java
    Par jeepnc dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2007, 12h30
  4. Compiler du code Java via Java
    Par sozie9372 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 10h14
  5. [Débutant]Compilation d'un fichier .java
    Par adilou1981 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/04/2005, 14h46

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