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

avec Java Discussion :

execution de programme externe


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut execution de programme externe
    Salut à tous,

    J'ai besoin, à travers un programme JAVA, de lancer un script ant.
    Je m'aide pour ça de 2 tutorials qui sont les suivants :
    http://blog.developpez.com/adiguba?t...es_plus_simple
    http://ydisanto.developpez.com/tutoriels/j2se/runtime/

    Pourtant malgré l'aide de ces tutos je n'arrive pas à lancer ma commande.
    J'essaie en vain des tas de possibilités mais je ne fait que tourné en rond.

    J'ai déjà créé un fichier batch qui lance mon script de la manière suivantes:
    ant -buildfile script\ant_script.xml

    J'ai donc pour le moment 2 soucis majeurs pour ma commande sous JAVA:
    -les espaces, car j'utilise un chemin absolu avec le dossier program Files dedans
    -les arguments, car je lance mon programme ant avec 2 arguments.

    Je vous joint une de mes lignes de code de test pour l'appel de ma commande en JAVA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Runtime runtime = Runtime.getRuntime();
    runtime.exec("C:/Program%20Files/apache-ant-1.7.1/bin/ant -buildfile D:/projet/test/script/ant_packers_script.xml");

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En même temps, ANT propose une API permettant de déclencher des builds directement depuis java, ce qui est un peu plus propre que de bon vieux Runtime.

    http://www.ibm.com/developerworks/we...502_gawor.html

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Disons que c'est dans le cadre d'un apprentissage de JAVA que je fait ca donc même si il existe plus simple, il est important pour moi de programmer quelques chose en JAVA pour faire cela.

    Mais je garde l'info au chaud

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    J'ai trouvé ce code mais qui malheureusement ne marche que pour des fichiers textes, aller savoir pourquoi...

    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
     java.io.*;
     public class Exec {
     public static void main(String[] args) {
     String cmd;
     
     cmd = "cmd /c c:\\fichier.bat";
     
     try {
     Runtime r = Runtime.getRuntime();
     Process p = r.exec(cmd);
     p.waitFor();//si l'application doit attendre a ce que ce process fini
     }catch(Exception e) {
     System.out.println("erreur d'execution " + cmd + e.toString());
     }
     }

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Je pense avoir trouver une partie de la réponse dans ce tutorial:
    http://www.valhalla.fr/2001/03/17/co...rogramme-java/

    Malheureusement j'ai un soucis dans l'interprétation de ma ligne de commande qui contient ce fameux "program Files" et son espace.

    J'ai essayer %20, \, etc... rien à faire il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot run program ""C:\Program":
    Si vous avez des idées je suis très preneur

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Il semblerais que cela marche bien avec des espaces quand la commande pointe sur une fichier .exe mais pas pour un .bat...

    N'est-il dont pas possible de lancer un programme bat avec des paramètres sous JAVA ?

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par miltone Voir le message
    Si tu aurais tout lu tu aurais surement vu qu'il est préférable d'utiliser la version exec(String[]) pour séparer les paramètres, et qu'il est nécessaire de traiter les flux d'E/S depuis différents thread...

    Bref on est bien loin du code que tu donnes !



    Sinon, je n'ai pas compris pourquoi la solution de sinok ne te convient pas

    a++

  8. #8
    Membre éclairé Avatar de fatypunk
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut
    Citation Envoyé par miltone Voir le message
    Disons que c'est dans le cadre d'un apprentissage de JAVA que je fait ca donc même si il existe plus simple, il est important pour moi de programmer quelques chose en JAVA pour faire cela.

    Mais je garde l'info au chaud
    Si tu apprends à coder en java alors je tiens à te dire une chose à mes yeux cruciale : on choisit un language, une plateforme, un framework en fonction des besoins ! Chaque solution présente des avantages et des inconvénients ! Le principal avantage de java réside dans sa portabilité : Linux, Windows, Mac Os, Solaris, téléphone portable et même frigo... Ton code n'est pas portable et donc annule un des principaux avantage de la plateforme java...

    Il existe un tas de solution plus propre. Une solution simple est de placer la commande à exécuter comme un paramètre modifiable à l'extérieur du code ! Par exemple dans un fichier de configuration en xml. Une autre solution serait de placer le code spécifique à une plateforme hôte dans un fichier de script externe dans un langage de script directement l'exécutable par la JVM : ruby, beanshell, ... on pourrait alors sélectionner ou écrire un script pour n'importe quelle plateforme hôte !

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par fatypunk Voir le message
    Il existe un tas de solution plus propre. Une solution simple est de placer la commande à exécuter comme un paramètre modifiable à l'extérieur du code ! Par exemple dans un fichier de configuration en xml. Une autre solution serait de placer le code spécifique à une plateforme hôte dans un fichier de script externe dans un langage de script directement l'exécutable par la JVM : ruby, beanshell, ... on pourrait alors sélectionner ou écrire un script pour n'importe quelle plateforme hôte !
    Sachant que la solution la plus propre en full java je la cite un poil plus haut...

  10. #10
    Membre éclairé Avatar de fatypunk
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 71
    Par défaut
    Citation Envoyé par sinok Voir le message
    Sachant que la solution la plus propre en full java je la cite un poil plus haut...
    Autant pour moi je ne connaissais pas... J'ai parcouru en vitesse le lien que tu donne mais il y a un truc que je n'ai pas saisi : Le tout est compilé ou tu peux modifier un fichier après installation afin de l'adapter à un autre os/archi par exemple ?

Discussions similaires

  1. [C#] Comment executer un programme externe ?
    Par Worldofdada dans le forum C#
    Réponses: 7
    Dernier message: 11/02/2009, 14h36
  2. [Système] execution des programmes externes
    Par jadoo dans le forum Langage
    Réponses: 2
    Dernier message: 06/11/2006, 16h55
  3. Exécuter un programme externe et détecter sa terminaison
    Par leserapheen dans le forum Pascal
    Réponses: 10
    Dernier message: 04/10/2006, 17h19
  4. [VB6]Executer un programme externe et récuperer les sorties
    Par agro dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 29/03/2006, 13h08
  5. [Système] Executer un programme externe depuis un scripte php
    Par Scorpion Rouge dans le forum Langage
    Réponses: 1
    Dernier message: 24/01/2006, 11h59

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