Avantages et inconvénients du packaging.

Résolu/Fermé
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 - 10 déc. 2021 à 17:53
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 - 17 déc. 2021 à 19:42
Bonjour KX.
Avant de proposer sur le web mes programmes "packagés", je voudrais avoir quelques éclaircissements supplémentaires. La technique que tu m'as enseignée marche superbement et je t'en remercie encore une fois. Cependant, le résultat est un package total de 240 Mégas, pour un de mes programmes, alors que mes programmes ne font qu'au maximum 10 Mégas (j'en ai 9 sur le web); le programmes le plus volumineux est, ce n'est pas étonnant, le runtime (environ 200 Mégas), partagé en deux sous dossiers bin et lib de tailles égales.

Question 1. Est-ce que ce packaging dispense la personne, qui télécharge mon programme, d'avoir téléchargé au préalable le Java, dans sa bonne version de préférence (à mon avis oui, et c'est un gros plus!, mais je n'en suis pas certain).

Question 2 Serait-il possible d'enlever des éléments inutiles dans ce runtime? (mon avis est que non, mais...).

Question 3. Est-il possible d'avoir le même runtime pour deux ou plusieurs programmes différents . Mon avis est que non, puisque l'élément mon_programme.exe (sur lequel cliquer) est situé dans le répertoire dist/bundles/mon_programme, ce répertoire ayant en parallèle le dossier runtime (dist/bundles/mon_programme/runtime).

Question 4. Pourquoi les dimensions de mes fenêtres (de type Windows) apparaissent elles environ 10% plus grandes pour le mon_programme.exe (avec package) que pour le mon_programme.jar (sans)? Y-a-t-il un moyen simple de corriger cela?

D'avance Merci.

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 déc. 2021 à 09:09
Bonjour,

Question 1. Est-ce que ce packaging dispense la personne, qui télécharge mon programme, d'avoir téléchargé au préalable le Java, dans sa bonne version de préférence
Oui, Java est embarqué dans le package, c'est même le but premier du packaging.

Question 2 Serait-il possible d'enlever des éléments inutiles dans ce runtime?
Dans ton cas en Java 8, non. Mais à partir de Java 9 c'est possible (rappel : la dernière version est Java 17), car la JVM est découpée en modules et les modules qui ne sont pas utilisés ne sont pas packagés.

Question 3. Est-il possible d'avoir le même runtime pour deux ou plusieurs programmes différents
Ce n'est pas impossible dans l'absolu, c'est ce que propose Java historiquement où on télécharge la JVM sur son poste une fois pour toute les applications à côté, mais la philosophie du packaging est à l'opposé, chaque application est unitaire et peut être utilisée indépendamment les unes des autres.

Question 4. Pourquoi les dimensions de mes fenêtres (de type Windows) apparaissent elles environ 10% plus grandes pour le mon_programme.exe (avec package) que pour le mon_programme.jar (sans)?
Je pense que le problème est dans le code. Pour avoir fait le HelloWorldSwing ensemble, il n'y avait pas ce problème.

Remarque : depuis Java 8 (en 2014), la librairie recommandée pour les applis desktop c'est Java FX, la technologie Swing n'est plus maintenue. Le packaging a été pensé initialement pour Java FX et les dernières évolutions des modules et des outils de packaging sont fait d'abord pour supporter Java FX, pas Swing.
En résumé : proposer un packaging d'une application Java FX en Java 17 serait bien plus léger que ton application Swing en Java 8.
0
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023
11 déc. 2021 à 10:17
Merci, KX.

Je vais passer à Java 19,cela me parait en effet nécessaire.
Pour ce qui est de FX, est-ce que la syntaxe de production du package est la même que pour Swing. Autrement dit, peut on transformer ce que tu m'as enseigné:

C:\workspace\monProgramme\src\start\HelloWorldSwing.java
C:\workspace\monProgramme\src> javac start\HelloWorldSwing.java
C:\workspace\monProgramme\src> java start.HelloWorldSwing
C:\workspace\monProgramme> javapackager -makeall -appclass start.HelloWorldSwing -name monProgramme
C:\workspace\monProgramme\dist\bundles\monProgramme> monProgramme.exe

en

C:\workspace\monProgramme\src\start\FX.java
C:\workspace\monProgramme\src> javac start\FX.java
C:\workspace\monProgramme\src> java start.FX
C:\workspace\monProgramme> javapackager -makeall -appclass start.FX -name monProgramme
C:\workspace\monProgramme\dist\bundles\monProgramme> monProgramme.exe

et, en particulier, a-t-on le même résultat, avec les répertoires dist et bundles?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 déc. 2021 à 10:38
Javapackager n'a existé qu'en Java 8, c'était le successeur de javafxpackager en Java 7, et a été remplacé en Java 9 par jlink pour prendre en charge les modules.

Depuis Java 14 on a un outil beaucoup plus riche, jpackage, dont la documentation est ici :
https://docs.oracle.com/en/java/javase/17/jpackage/toc.htm
0
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié le 16 déc. 2021 à 15:48
Bonjour KX.
J'ai donc déchargé je java17, et ai copié le C:\Program Files\Java\jdk-17 dans un répertoire où je pouvais écrire: C:\Users\MASTER\java\jdk-17 créé auparavant. J' ai transféré mon programme optique.java dans le C:\Users\MASTER\java\jdk-17\bin et l'ai compilé et exécuté: tout s'est bien passé. J'ai donc bien un optique.jar sur ce \bin

Puis j'ai fait la ligne de commande suivante, comme je pense que le demande la documentation que tu m'as indiquée:
C:\Users\MASTER\java\jdk-17\bin> ./jpackage --input C:\Users\MASTER\Java\jdk-17\bin --main-jar optique.jar.
La première fois on m'a dit d'aller télécharger WIX, ce que j'ai fait, et je l'ai installé, tout s'est bien passé. J'ai alors refait la ligne de commande ci-dessus, et là ça a mis une minute sans répondre, puis le prompt est revenu sans commentaire. J'ai en effet trouvé sur mon répertoire le optique-1.0.exe ou plutôt ...optique-1.0.exe (avec 3 signes peu visibles devant). J'ai cliqué dessus, et cela m'a généré C:\Program Files\optique.exe avec deux fichiers runtime et app en parallèle; donc je pensais n'avoir qu'à cliquer deux fois dessus. Mais quand le le fais, rien ne se passe et si j'enlève les 3 petits signes devant, on me dit que le nom du fichier source et destination sont identiques et on remet les 3 signes.
Donc, je suis proche de la solution, mais il y a encore un hic. As tu une idée sur ce qui ne marche pas?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023
17 déc. 2021 à 17:10
Bonjour,
C:\Users\MASTER\java\jdk-17\bin> ./jpackage --input C:\Users\MASTER\Java\jdk-17\bin --main-jar optique.jar
On a déjà parlé du fait que tu ne devrais pas travailler directement dans le JDK mais plutôt dans un répertoire de travail dédié.

Avec cette commande, tu lui dis que l'input de ton programme c'est tout le répertoire bin du JDK (y compris la commande jpackage elle même !) ce qui signifie que le résultat de ton programme va se mélanger avec les fichiers du JDK !!

La commande de base est celle-ci :
jpackage --input app-directory --main-jar jar-file [--main-class main-class]

Ce qu'il pourrait manquer c'est donc la déclaration de la classe main, celle qui permet de dire comment exécuter le programme. C'est optionnel si la main-class est déjà précisée dans le Manifest du main-jar, mais est ce bien le cas ?

Quant à ces "3 petits signes" ? Est-ce que tu peux être plus précis ? Par exemple faire une capture d'écran, pour voir à quoi cela ressemble...
0
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié le 17 déc. 2021 à 19:12
Bonsoir.
Bon, j'ai fait un répertoire C:\Users\MASTER\java\jdk-17\programmes_optique, dans lequel j'ai mis mon application_optique_plus.java que j'ai compilé avec le MANIFEST.MF et éxécuté: pas de problème. Puis j'ai fait la ligne de commande:
C:\Users\MASTER\java\jdk-17\bin> ./jpackage --input ../programmes_optique --main-jar application_optique_plus.jar
et j'ai bien récupéré dans le C:\Users\MASTER\Java\jdk-17\bin l'élément application_optique_plus-1.0.exe mais quand je clique dessus, une fenêtre s'ouvre puis se referme illico avec un avertissement sonore, et rien n'est fait dans le répertoire Program files.
En fait; j'ai toujours les trois petits blancs dans mon exe:comme tu peux le constater sur ce qui suit, mais sans commentaire cette fois:
PS C:\Users\MASTER\java\jdk-17\bin> dir *applicatio*


Répertoire : C:\Users\MASTER\java\jdk-17\bin


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 17/12/2021 18:26 52371968 bbbapplication_optique_plus-1.0.exe
-a---- 19/11/2021 18:31 1273505 application_optique_plus.zip
les trois blancs sont remplacés par des b parce que le traitement de texte de comment ça marche élimine les blancs!
0
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
17 déc. 2021 à 19:30
Encore une info: j'ai essayé de supprimer application_optique_plus-1.0.exe Impossible car "il est ouvert dans installer de application_optique_plus". Je l'avais pourtant éliminé avant de faire ce que je t'ai écrit précédemment. .
0