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

Entrée/Sortie Java Discussion :

générer un lanceur d'une application modulée avec jpackage


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Août 2019
    Messages : 9
    Points : 11
    Points
    11
    Par défaut générer un lanceur d'une application modulée avec jpackage
    Salut à tous !
    Depuis deux jours, j’apprends à programmer en utilisant les modules en java. Je le fais pour obtenir des applications qui pèsent moins et ayant leur propre JRE intégrée (technique qui résout le problème de versions…).
    Lorsque je finis de coder, j’exporte en jar exécutable et j’exécute ce jar : tout se passe très bien. J’utilise en ligne de commande l’outil jpackage (qui remplace javapackager de puis jdk-12 je crois) pour générer l’image de l’application, et j’obtiens un dossier image de l'application contenant le lanceur, l’icône et plusieurs autres fichiers propres à l’application.

    Voici le problème :

    Si je n'utilise pas de modules dans mon code source (sur eclipse) ; après génération de l’image, en lançant (par son lanceur dans le dossier) l’application ; ça marche très bien comme sur eclipse. Mais ayant utilisé les modules, en lançant l’application rien ne se passe, et je c'est ce qui me fait exaspérer. Pourtant c'est cette deuxième option qui m'est bénéfique à cause de la taille de l'application comme je l'ai évoqué plus haut. Voici les codes :

    • en utilisant les modules:

    module-info.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    module moduleunique {
    	requires java.desktop;	
    }
    la classe Test.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
    package monpackage;
     
    import javax.swing.JFrame;
     
    public class Test {
     
    	public static void main(String[] args) {
    		JFrame f=new JFrame("Essai de modularisation");
    		f.setSize(400, 150);
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
    }
    Après export en jar, en utilisant jpackage sur l'invite de commande comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\Vital>jpackage --type app-image -n appliTest -p leChemindudossierContenantLeJar -m moduleunique/Test
    Le résultat est un dossier nommé appliTest pesant la moitié du dossier qu'on aurait eu sans utiliser les modules. Son lanceur appliTest-1.0.exe, une fois exécuté ne produit rien.
    Quelqu'un aurait-il une idée de ce qui se passe? ou aurait toute autre solution pour que j'aboutisse à mon objectif ?

    Toutefois voici un indice que semble parler
    N'ayant pas utilisé de module; dans le sous dossier app du dossier appliTest se trouve un fichier de configuration appliTest.cfg, lequel, à l'aide d'un éditeur de texte affiche ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Application]
    app.name=appliTest
    app.version=1.0
    app.runtime=$ROOTDIR\runtime
    app.identifier=Test
    app.classpath=$ROOTDIR\app\Test.jar
    app.mainjar=$ROOTDIR\app\Test.jar
    app.mainclass=Test
    
    [JavaOptions]
    
    [ArgOptions]
    Mais ayant utilisé les modules; voici le contenu du même fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Application]
    app.name=appliTest
    app.version=1.0
    app.runtime=$ROOTDIR\runtime
    app.identifier=Test
    app.classpath=
    app.mainmodule=moduleunique/Test
    
    [JavaOptions]
    
    [ArgOptions]
    En comparant les lignes en gras des codes de ces deux fichiers je comprends que l'application modulaire manque de classpath c'est ainsi qu'au lancement, le lanceur ne trouve pas de le jar appliTest.jar et par conséquent n'exécute rien.
    Si alors mon analyse est correcte, quelqu'un pourrait me montrer comment le faire automatiquement en ligne de commande ? car en recopiant simplement le contenu du classpath rien ne change lors du lancement.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Août 2019
    Messages : 9
    Points : 11
    Points
    11
    Par défaut eureka
    Salut, je viens de trouver la reponse.
    Il était juste question de préciser en ligne de commande que le module-path est dans le .jar (à la fin du chemin du dossier contenant ce dernier) et que la classe main est dans le module/package/ comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Jpackage .... -p cheminDuDossierDuJar/nomDuJar.jar -m nomDuModule/monpackage.Test
    .
    J'obtiens un dossier image qui pèse moins ... Vive les modules avec java et l'outil jpackage !!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2010, 11h57
  2. Réponses: 4
    Dernier message: 23/02/2010, 11h00
  3. Réponses: 6
    Dernier message: 13/07/2007, 11h52
  4. Réponses: 2
    Dernier message: 23/03/2005, 21h58

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