web-dev-qa-db-fra.com

Comment créer un fichier JAR exécutable dans IntelliJ comme je le ferais dans Eclipse

Mon processus de création d’un fichier JAR exécutable à partir d’un projet comportant de nombreuses bibliothèques avec Eclipse a été suivi.

Exporter> JAR exécutable> Sélectionner la configuration de lancement> Intégrer les bibliothèques requises dans le JAR généré> Terminer

Cela crée un seul fichier JAR dans ma destination d'exportation que je FTP sur mon serveur et fonctionne bien.

Je suis récemment passé à IntelliJ pour diverses raisons et cela a été une amélioration dans tous les cas, à l'exception de la construction de mes fichiers JAR, ce qui m'oblige à retourner temporairement à Eclipse.

Avec IntelliJ I:

Ouvrez la structure de projet> Artefacts et créez un nouveau fichier JAR à partir de modules avec dépendances. J'ai alors ma mise en page de sortie avec le nom du fichier JAR, un META-INF à l'intérieur et toutes mes bibliothèques au format Extracted <lib.jar/> _ (désolé, je ne peux pas télécharger de captures d'écran sur ce VPN.)

Je construis mon artefact (qui fait environ 15 Mo de plus) et le transfère sur mon serveur, essaie de l'exécuter et j'obtiens l'erreur suivante:

Exception in thread "main" Java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

Comment puis-je imiter comment je le fais dans Eclipse?

[~ # ~] éditer [~ # ~]

Les deux JAR créés diffèrent considérablement:

Le fichier jar valide créé par Eclipse se présente comme suit: Good jar

Alors que le .JAR invalide ressemble à ceci: Bad jar

27
Nanor

Vous faites face à deux problèmes, l'un semble majeur et l'autre mineur:

  • Major: exception de signature
  • Mineur: la taille du pot est supérieure de 15 Mo à celle produite par Eclipse.

La solution de ces deux problèmes réside dans la manière dont vous construisez l'artefact. Tout d’abord, supprimez tous les extracted *.jar puis ajoutez tous les pots parmi les éléments disponibles comme indiqué sur la figure.

Dependencies screenshot

Il est évident que l’ajout de bocaux compressés (compressés) diminuera la taille. Mais cela résout également le problème de la signature. Pour plus d'explications, jetez un coup d'œil à ceci article . Je ne citerai qu'une ligne.

Il est probablement préférable de garder le pot officiel en l'état et de simplement l'ajouter en tant que dépendance dans le fichier manifeste ......

Il semble que certaines des dépendances soient signées et que le reconditionnement fausse le META-INF de votre projet.

13
user2241537

Si vous utilisez Maven, vous devez placer le répertoire META-INF Dans le dossier /main/resources Au lieu de main/Java.

Référence: Intellij - Nikolay Chashnikov

Ensuite, vous pouvez exécuter le jar exécutable normalement avec Java -jar filename.jar

4
another

Vous pouvez ces étapes:

1) Fichier -> Structure du projet -> Paramètres du projet -> Artefacts -> Jarre -> À partir de modules avec dépendances

2) Cochez la case Inclure dans la construction du projet.

3) Faites un clic droit sur le module -> construire le module 'NomModule'

2
Kirill