Question de bonnes pratique et autres

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J'ai donc quelques questions de bonne pratiques que je connais pas au niveau de "exportation jar" "buid path" "maven" et tout ce genre de chose. Jusqu'à présent je ne m'étais pas posé la question car je n'ai pas réellement eu de problème de cette ordre face à moi.

1) Quelle est la différence entre un JAR ou un Runnable JAR au point de vue fichier. Il me semblait que ce n'était que le manifest, je me trompe ?

2) Si je génère un JAR Runnable, je l'execute pas de soucis. Ensuite je tente le même en JAR File simple. C'est juste un JAR permettant de compresser du code afin d'être réutiliser on est d'accord ? Dans le cas 2, à quoi sert le manifest qu'on peut tout de même déclarer ? Un JAR File peut-il devenir executable ?

J'en rajouterai très prochainement sur des bonnes pratiques.

Édité par Kraguesh

Staff

1) Quelle est la différence entre un JAR ou un Runnable JAR au point de vue fichier. Il me semblait que ce n'était que le manifest, je me trompe ?

La seule différence est que dans le jar Runnable, tu as un Manifest avec une ligne qui précise la classe Main à lancer qui ressemble à Main-Class: com.blabla.Main

Si je génère un JAR Runnable, je l'execute pas de soucis. Ensuite je tente le même en JAR File simple. C'est juste un JAR permettant de compresser du code afin d'être réutiliser on est d'accord ?

On est d'accord.

Dans le cas 2, à quoi sert le manifest qu'on peut tout de même déclarer ?

Il sert a renseigner des métadonnées pour mieux décrire et identifier ton jar. Sinon ça serait pas très utile si le manifest ne servait qu'a déclarer la nature Runnable ou non de ton jar.

Un JAR File peut-il devenir executable ?

Étant donné qu'il ne contient pas la fameuse ligne qui dit dans quelle classe se trouve la classe main principale, il ne peut pas être exécutable en cliquant dessus comme on pourrait le faire depuis Windows/Linux/OsX. Cependant tu peut choper un Jar File et le lancer en ligne de commande comme ceci java -cp mon-jar.jar com.blabla.Main.

Ceci dit, de manière générale, on dirait que tu essaye de contourner plein de problème de la mauvaise façon. Si tu prend la peine d'expliquer le contexte, tu auras certainement de meilleures réponses. En te lisant, je ne peux m’empêcher de penser que la solution a ton problème est bien plus simple que ce que tu essaye de scotcher.

Auteur du sujet

Je ne contourne aucun problème. J'essaye juste plusieurs configurations possible et de saisir certaines nuances, dont celle-ci :

3) Sur eclipse en autre, quand on veut exporter un JAR File, dans la dernière étape, on peut tout de même choisir une classe main, qui sera donc ajouté au manifest. Pourtant celui-ci n'est tout de même executable, pourquoi ? Est-ce à cause du à la variable classpath qui n'est pas présent dans le manifest du JAR File ou autre ?

4) Imaginons que j'ai donc 2 packages dans mon source folder, chacun représentant une application. Imaginons je suis sur Eclipse, et je veux exporter un Runnable JAR l'une des 2 applications. Je sélectionne la classe voulue, je le lance tout marche nickel. Par contre mon JAR contient aussi le package de l'autre appli et donc rend mon JAR volumineux pour rien. Y'a t-il un moyen que l'exportation ne prenne seulement le package voulu (via Eclipse, via ligne de commande) ?

Édité par Kraguesh

Staff

Pourtant celui-ci n'est tout de même executable, pourquoi ? Est-ce à cause du à la variable classpath qui n'est pas présent dans le manifest du JAR File ou autre ?

A cause du classpath oui, ainsi que du fait que le Runnable Jar lorsqu'il est construit va inclure (si tu l'as renseigné dans les build path) les jars externes. Le jar File ne regarde pas les build paths lui.

Y'a t-il un moyen que l'exportation ne prenne seulement le package voulu (via Eclipse, via ligne de commande) ?

Est-ce qu'au niveau d'Eclipse, tu sais dire exactement ce qui se trouve dans ton Java Build Path ?

C'est normalement CLic Droit sur ton projet -> Propriétés. Puis dans la barre de gauche tu as un "Java Build Path". Si tu vas dans l'onglet "Order and Export" (je ne suis pas certain du nom) tu peux cocher/décocher les Source Folder que tu aimerais voir dans ton Runnable Jar

Auteur du sujet

Ok parfait merci. Du coup faudrait que je transforme tous mes packages père en source folder pour pouvoir faire ça, car là j'ai qu'un src et mes sous applis sont partagées en package.

Par contre je n'arrive pas à lancer mon JAR File via le java -cp. Ca me dit qu'il ne toruve pas charge pas la classe principale.

5) Quand on génère on génère un Runnable Jar (Ecplise), on a la possibilité de choisir de laisser compresser ou de décompresser les librairies utilisés, y'a t-il une solution plus propre qu'une autre ?

Staff

Par contre je n'arrive pas à lancer mon JAR File via le java -cp. Ca me dit qu'il ne toruve pas charge pas la classe principale.

ça ressemble a un chemin de package pas correct. Difficile de te dire sans savoir comment tu as organisé ton app.

Quand on génère on génère un Runnable Jar (Ecplise), on a la possibilité de choisir de laisser compresser ou de décompresser les librairies utilisés, y'a t-il une solution plus propre qu'une autre ?

La solution propre, j'ai envie de dire que c'est un bon gestionnaire de dépendance (maven, ou gradle).

Sinon, je n'ai jamas testé, mais sur Eclipse tu as des options Libray Handling comme ci-dessous :

La deuxième case devrait te permettre de garder la compression.

Auteur du sujet

Je sais je sais… Grrrr. J'utilise Maven dans l'ordinaire.

Hmm mon app c'est src – classe (package) ---- RandomRhythm – jar (folder) ----jMusic

et je lance bien java -cp test.jar classe.RandomRhythm.

Ensuite, j'ai testé de créer plusieurs sources folders, et dans java build patch, ils sont tous cochés de base, mais je ne peux les décocher.

Staff

et je lance bien java -cp test.jar classe.RandomRhythm.

Il doit y avoir un truc qui a été mal fait alors.

Ensuite, j'ai testé de créer plusieurs sources folders, et dans java build patch, ils sont tous cochés de base, mais je ne peux les décocher.

Et si tu essayes simplement de remove les dossiers des packages qui ne t'intéressent pas dans l'onglet Source de ton Java build Path ? Avant de builder. Tu pourras toujours les rajouter après.

Auteur du sujet

J'vois pas ce que j'aurai pu louper.

Et si tu essayes simplement de remove les dossiers des packages qui ne t'intéressent pas dans l'onglet Source de ton Java build Path ? Avant de builder. Tu pourras toujours les rajouter après.

firm1

Ouai ca fonctionne, mais c'est ça, faut bien indiquer que ce ne sont plus des sources folders.

Du coup dernière question, avec maven, peut on indiquer les librairies, package ou source folder à export ? Et peut on sortir un runnable jar avec maven ?

Édité par Kraguesh

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte