Meilleur moyen de créer un package d'un projet Java en ligne de commande
-
29-10-2019 - |
Question
Je crée un projet en ligne de commande java, sans interface graphique. Le projet utilise n'importe quel nombre de projets open source: Spring, Logback, Commons CLI, etc. Quand j'ai commencé à penser à l'empaquetage, j'ai imaginé qu'il sortirait sous forme de fichier zip, qui pourrait être explosé dans le fichier jar, avec un sous-répertoire lib et des fichiers jar dépendants dans la lib.
adapter.jar
/lib/dependencyA.jar
/lib/dependencyB.jar
etc.
J'ai joué avec Maven Assembly, mais il ne sort toujours pas comme ci-dessus, et je n'ai trouvé aucun exemple qui génère la structure ci-dessus. Est-il possible de le faire? De plus, avoir une structure multi-module ajoute une autre couche de complexité que je n'ai pas été en mesure de résoudre, car le module d'assemblage ne peut pas trouver le module principal en tant que dépendance. C'est mon premier projet Maven, donc j'apprends toujours comment fonctionne Maven. J'ai parcouru le livre Sonatype, mais j'ai raté quelque chose, car même l'utilisation de la section Meilleures pratiques n'a pas pu résoudre la dépendance manquante. Les exemples que j'ai vus impliquent généralement la fusion dans un fichier jar exécutable uber, dont certains utilisent le projet Shade, d'autres non. Ma question est la suivante: est-ce que faire un uber jar comprenant des bibliothèques tierces comme Spring, etc. est une bonne idée? Ou devrais-je persévérer avec mon plan de sous-répertoire zip / lib d'origine?
La solution
Faites dépendre votre module d'assemblage des modules que vous souhaitez empaqueter, puis utilisez les balises
Veuillez lire attentivement la documentation des descripteurs d'assemblage.Vous pouvez compresser, décompresser, inclure / exclure et définir des autorisations pour les fichiers de votre assemblage.
Si vous n'avez pas vu le livre sonatype sur maven, voici le chapitre correspondant: http://www.sonatype.com/books/mvnref-book/reference/assemblies-sect-best-practices.html
EDIT: a échappé aux <
Autres conseils
Il vous suffit d'être plus précis dans votre descripteur d'assemblage.Utilisez un ensemble de dépendances qui inclut uniquement le fichier jar principal et le livre en haut, et un autre qui exclut uniquement le fichier jar principal et le livre au répertoire lib.