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
la classe Test.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 module moduleunique { requires java.desktop; }
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
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); } }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\Users\Vital>jpackage --type app-image -n appliTest -p leChemindudossierContenantLeJar -m moduleunique/Test
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:
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
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]
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.
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]
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.
Partager