Création d'un .jar

Création d'un .jar

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

Bonjour,

J'ai un besoin particulier pour la création de mon JAR mais j'ai quelques soucis.

Pour expliquer, j'ai un projet JAVA ou en réalité dedans, j'ai plusieurs modules représenté par des packages. Chaque modules est un sous programme qui peut être exporté en JAR. Si j'ai rassemblé tous ces modules dans un seul projet c'est pour ne pas dupliquer les jar externes utilisés car ils sont presques tous commun.

Imaginons cette arbo (ce n'est pas mon arbo) :

projet java : modules

-------------------- src

------------------------- package jeu puzzle

------------------------- package jeu memoire

------------------------- package jeu dessin

Mon besoin serait d'avoir un JAR Runnable, comportant seulement les packages du modules voulus, ainsi que dedans, les jar externes utilisés mais NON DECOMPRESSE. Si je passe par Export => Jar Runnable, je choisis l'option de ne pas décompresser les librairies. Ceci est le résultat voulu sauf qu'il m'intègre dans le jar final, tous mes packages, même ceux pas utilisé donc ca augmente la tailel de mon jar inutilement. Donc si je choisis de créer un jar pour le jeu dessin, je sélectionne bien la class Main du package jeu dessin. Il va tout de même me foutre les packages jeu puzzle et mémoire dans le jar alors qu'une intéraction est là avec eux.

J'ai tenté de passé par Export => Jar file. Là c'est pratique, on peut choisir quel package on veut voir dans le jar final. Donc parfait, je choisis ceux dont j'ai besoin, par exemple jeu dessin. Le soucis c'est que là je trouve pas l'option pour que la décompression des librairies utilisé ne se fasse pas.

Si quelqu'un a la solution (sans utiliser maven, contrainte technique). Merci d'avance

Édité par Kraguesh

Staff

Salut,

En quoi est-ce une contrainte de dupliquer les JAR externes? Si je comprends bien, tu as regroupé tes programmes au sein d'un même projet alors qu'ils sont totalement indépendants. C'est un peu contradictoire…

J'imagine que si tu ne veux pas utiliser Maven, c'est pareil pour Ant ou Gradle…

Dans ce cas pour ne pas t'embêter, éclate tes modules en autant de projets. Comme ça, tu pourras les packager sans te prendre la tête (au copier-coller des bibliothèques tierces près).

Auteur du sujet

J'aimerai au besoin oui, ne pas utiliser Maven ou autre. Ce n'est pas contradictoire dans le sens ou même si leur rôle premier n'est identique, ils peuvent utiliser des classes communes. C'est pour donc éviter ce dupliquat de class et de libraries externes que j'ai tout rassemblé.

Et dupliquer les JAR est une contrainte oui, rien qu'en terme de stockage, je vais remplir le dépôt pour rien.

Staff

Tu parles dans ton message de :

J'ai tenté de passé par Export => Jar file.

Mais a aucun moment tu ne dis quel IDE tu utilise. Peux-tu le préciser (Eclipse, Netbeans, IntelliJ, etc) ?

Maintenant concernant :

Le soucis c'est que là je trouve pas l'option pour que la décompression des librairies utilisé ne se fasse pas.

Pourquoi veux tu que la "décompression des librairies" ne se fasse pas ? C'est une contrainte ? Parce qu'il faut savoir qu'un jar est une archive (déjà compréssée), donc tout ce qui se trouve à l'intérieur est compressée. Donc si c'est juste pour un problème d'espace, tu n'aura pas mieux là.

Staff

J'aimerai au besoin oui, ne pas utiliser Maven ou autre. Ce n'est pas contradictoire dans le sens ou même si leur rôle premier n'est identique, ils peuvent utiliser des classes communes. C'est pour donc éviter ce dupliquat de class et de libraries externes que j'ai tout rassemblé.

Et dupliquer les JAR est une contrainte oui, rien qu'en terme de stockage, je vais remplir le dépôt pour rien.

Kraguesh

Quel dépôt? Si tu parles d'un dépôt Git, ne commit surtout pas tes JARs externes, ajoute-les à ton .gitignore et fais une doc pour préciser les bibliothèques à récupérer + leur version pour d'éventuels collaborateurs. Ou à la limite, mets-les dans un répertoire à part et fait pointer ton classpath dessus.

Et rien ne t'empêche de mettre toutes tes classes communes dans un nouveau projet avec une dépendance à ce socle commun dans tes projets individuels.

Pour être honnête, faire du Java en 2016 sans gestionnaire de dépendances, il faut le vouloir…

Edit: orthographe.

Édité par Fumble

Auteur du sujet

J'en utilise des gestionnaires là n'est pas le soucis. Et je vais pas aller chercher plus loin car je n'ai pas le temps d'expliquer le contexte (hadoop, mqtt, jorammq, apache storm…) bref.

Je posterai un nouveau message concernant certaines bonnes pratiques que je ne connais pas concernant la mise en place de JAR.

Merci quand même :D

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