Utilisez "maven-shade-plugin" pour créer un seul fichier jar exécutable contenant toutes les dépendances requises pour votre projet Java ou Spring ?

Publié: 2016-11-16

maven-shade-plugin-how-to-create-javaspring-based-executable-jar-with-all-required-dependencies

Créez simplement un fichier Crunchify.jar avec toutes les dépendances à l'intérieur

La semaine dernière, j'ai écrit un tutoriel sur la façon d'utiliser maven-resources-plugin , maven-dependency-plugin & maven-jar-plugin pour générer votre projet Jar exécutable complet ? En conséquence, il crée/copie tous les fichiers requis dans le dossier /target/Crunchify .

Before: Utiliser les plugins maven-resource, maven-dependency, maven-jar :

maven-resources-maven-dependency-maven-jar-plugin-to-build-java-project

After: Utilisation du plugin maven-shade :

créer-juste-1-exécutable-jar-avec-toutes-les-dépendances-requises-propriétés-et-fichier-de-ressources-dans-it-pour-votre-java-ou-spring-project

Commençons par savoir comment obtenir le résultat ci-dessus :

Ici, comme vous le voyez, nous avons regroupé tout de Java Project dans just one file et nous avons donné le nom Crunchify.jar (avec tous les fichiers à l'intérieur).

Il y a quelques jours, je n'avais aucune idée de la façon d'y parvenir car je voulais créer une runnable binary distribution of a standalone Java application en utilisant Maven. Autrement dit:

  1. Comment créer un jar exécutable à base de ressort avec maven?
  2. Création d'une distribution binaire exécutable avec Maven pour Java + Spring + autres dépendances
  3. Comment créer des projets Java + Spring avec Maven ?

Normalement, dans Maven, nous nous appuyons sur la gestion des dépendances. Un artefact ne contient que les classes/ressources de lui-même. Maven sera chargé de découvrir tous les artefacts (JAR, etc.) dont le projet dépend, lors de la compilation et de l'exécution, etc.

Avec l'aide de maven -shade- plugin , j'ai pu atteindre cet objectif . Il offre la possibilité de conditionner l'artefact dans un uber-jar (One major file jar) , y compris ses dépendances et de masquer - c'est-à-dire de renommer - les packages de certaines des dépendances.

Dans mon projet, j'ai tellement d'autres dépendances, c'est-à-dire Spring Framework, JSON, des outils ~5.2MB big , etc.

Un uber-jar est quelque chose qui prend toutes les dépendances, extrait le contenu des dépendances et le place dans un seul JAR, avec les classes/ressources du projet lui-même. En ayant un tel uber-jar, il est easy for execution , car vous n'aurez besoin que d'un seul gros JAR au lieu de tonnes de petits JAR pour exécuter votre application. Cela facilite également la distribution dans certains cas.

Pour ce faire, vous devez mettre à jour votre fichier pom.xml.

Étape 1

Jetez un œil au fichier pom.xml complet. Vous seriez principalement intéressé par <build> .

Comme vous pouvez le voir ici, j'utilise Resource Transformers dans le fichier pom.xml. L'agrégation de classes/resources de plusieurs artefacts dans un Crunchify JAR est simple tant qu'il n'y a pas de chevauchement. Sinon, une sorte de logique pour fusionner les ressources de plusieurs fichiers JAR est nécessaire. C'est là que les transformateurs de ressources entrent en jeu.

Étape 2

Une fois que vous avez ajouté maven-shade-plugin à votre fichier pom.xml , utilisez simplement la commande ci-dessous pour créer votre projet.

Et vous devriez voir un Crunchify.jar (uber-jar) créé avec all dependencies mentioned in pom.xml file intérieur.

Étape 3

Accédez au dossier cible de votre projet et vous verrez le fichier Crunchify.jar créé. Utilisez simplement la commande

$bash> java -jar Crunchify.jar pour exécuter votre projet.

Avez-vous quelque chose à ajouter? Ajoutez-le à la section des commentaires ci-dessous. Profitez-en, passez une bonne journée et bon codage.