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 :

Jar exécutable qui exécute un sous Jar exécutable


Sujet :

Java

  1. #1
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut Jar exécutable qui exécute un sous Jar exécutable
    Bonjour,

    Titre bien compliqué pour mon problème alors c'est parti pour les explications!

    Hiérarchie:
    Projet:
    -Execute.jar
    -ficher.txt

    Le but est de compiler le projet en un jar exécutable au final.
    Le principe du programme est de lire la première ligne d'un fichier texte fait par l'utilisateur sans qu'il touche aux .java fournies d'où la mise en jar. La classe Main ce situe dans Execute.jar.

    Ce que j'aimerais savoir c'est si c'est possible et comment ?

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 996
    Points
    7 996
    Par défaut
    Oui c'est possible. Mais comment faire quoi ? Sur quoi bloques tu parce que j'ai du mal à voir ce qui pourrait te bloquer à vrai dire.

  3. #3
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Oui c'est possible.
    Chouette !

    Mais comment faire quoi ? Sur quoi bloques tu parce que j'ai dut mal a voir ce qui pourrait te bloquer a vrai dire.
    De quel manière faut-il que je m'y prenne pour pouvoir exécuter mon projet?
    Le but étant d'exécuter un Main dans le sous jar qui lira le .txt lui même exécuter par un jar qui englobe le tout.

    PS: Je ne demande pas comment lire un fichier.txt n'y crée une class avec un Main, c'est sur l'exécution du programme que je bloque .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    J'aurais tendance à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("java -jar monJar.jar");
    Romain.

  5. #5
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Runtime.getRuntime().exec("java -jar monJar.jar");
    Merci de votre réponse mais j'aimerais plus d'explication s'il vous plait, je n'ai jamais vu ce genre de code. Et permettez moi de préciser qu'il ne doit y avoir aucune class java supplémentaire que celles déjà présente dans le sous jar.

    Ludovyc

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Désolé j'ai assumé que tu savais lancer un jar en ligne de commande.

    java -jar est une ligne de commande permettant de lancer un jar en ligne de commande. Donc en exécutant "java -jar monJar.jar" dans une console (cmd si tu es sous windows) cela va exécuter la classe Main de ton jar (à condition que tu ais bien construit ton jar en indiquant quelle était la classe main).

    "Runtime.getRuntime().exec("...")" te permet d'exécuter une ligne commande à partir de Java.

    En combinant les deux tu obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("java -jar monJar.jar");
    Ce qui te permet d'exécuter un jar à partir de ton code Java. "monJar.jar" étant à remplacer par le nom du jar que tu auras lu dans ton fichier.

    Romain.

  7. #7
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Désolé j'ai assumé que tu savais lancer un jar en ligne de commande.
    Non désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("java -jar monJar.jar");
    Donc je fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void main(string args){
     Runtime.getRuntime().exec("java -jar monJar.jar");
     //Suite de mon main normal?
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Non

    Tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void main(string args){
    String nomJar = getNomJar();
    Runtime.getRuntime().exec("java -jar "+nomJar);
    }
    A toi d'écrire la méthode qui lit le fichier tecte pour récupérer le nom de to jar dans le fichier texte (la méthode que j'ai appeler getNomJar()).

    Romain.

  9. #9
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    A toi d'écrire la méthode getNomJar() qui lit le fichier texte pour récupéré le nom de ton jar
    Le fichier .txt ne contient pas le nom du jar sa sert pour autre chose

    La méthode que tu me propose nécessite de crée un autre .java qui appel mon .jar non? C'est ce que je veut évité. Le but est d'avoir un .jar avec tout le code et le .txt qui sera lu, on met le tout dans un .jar pour avoir qu'un seul fichier et que sa fasse propre et on double clique dessus et sa lance l'appli

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Ok autant pour moi j'avais mal compris...

    Dans Eclipse tu crées un nouveau projet Java nommé "execute". Tu fais cliques droits dessus, tu vas dans "Java Build Path", puis dans "Librairies", puis tu cliques sur "Add External Jars...". Tu sélectionnes ton sous jar à lancer. Ca va ajouter ton jar à ton projet.

    Tu crées ta class Main (pas dans le même package que l'autre projet ou alors pas avec le même nom), dedans tu appelles la classe Main de ton autre projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MainExecutable {
    	public static void main(String[] args) {
    		MonAutreMain.main(args);	
    	}
     
    }
    Tu devras faire le import qui va bien.
    Tu ajoute ton fichier fichier.txt à ton projet.

    Ensuite tu fais File > Export > Runnable Jar File. Puis sur cet écran :
    - Tu sélectionnes la lauch configuration de ton projet (tu dois l'avoir lancé au moins une fois dans eclipse)
    - Tu choisis le nom de ton fichier jar.
    - Tu choisis "Export required librairies into generated jar file"
    - Et tu cliques sur finish ...

    Romain.

  11. #11
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Bonjours,

    Veuillez me pardonnez de répondre aussi tardivement...

    J'ai fait des tests et ajouter le jar en tant que bibliothèque externe c'est une bonne idée! Cependant cela nécessite encore de crée une nouvelle class java dans le nouveau projet mais je pense qu'il n'y a pas d'autre alternative...

    Ceci fait je rencontre un nouveau problème concernant le path pour trouver mon fichier.txt... Actuellement il est dans un dossier "texte" situer dans le "src" du projet et le path est "texte/ficher.txt". Dans eclipse ça ne marche pas il faudrait faire un dossier "texte" au même niveau que le "src" et sa ne l'exporte pas, du coup j'ai trouver cette solution pour l'avoir après l'export! Mais lors de l'execution du jar... Il ne le trouve pas

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Bonjour,

    Comment est ce que tu récupères ton fichier ?

    Tu devrais passer par le classloader je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URL urlFichierTxt= getClass().getResource("/texte/fichier.txt");
    Romain.

  13. #13
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Je le récupère comme cela :

    File f=new File("texte/fichier.txt");

    Je vais me renseigner sur l'url loader !

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    URL urlFichierTxt= getClass().getResource("/texte/fichier.txt");
    File fichierTxt = new File(urlFichierTxt.toURI());
    Essai comme ça à la place.

    Romain.

Discussions similaires

  1. Jar exécutable qui ne fonctionne pas
    Par abdel_java dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 05/06/2014, 17h31
  2. code qui donne le temps d'exécution sous windows
    Par shadowless dans le forum C++
    Réponses: 3
    Dernier message: 20/06/2011, 17h03
  3. Créer un batch qui s'exécute en mode admin sous Vista
    Par Boojum42 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/04/2009, 15h03
  4. methode pour exécuter une class dans un jar
    Par yann_p dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2006, 17h47
  5. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/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