web-dev-qa-db-fra.com

Java Eclipse: différence entre l'exportation en tant que JAR et l'exportation en tant que JAR exécutable

Quelle est la différence dans Eclipse entre l'exportation en tant que fichier JAR et l'exportation en tant que fichier JAR exécutable? Ne sont-ils pas tous deux exécutables? Quels sont les avantages/inconvénients de chacun?

83
well actually

Le pot exécutable contient un fichier MANIFEST.MF, qui définit la classe Main à exécuter lors de l'exécution du pot.

Les jars non exécutables ne sont que des bibliothèques de classes, qui peuvent être ajoutées au chemin de classe pour que le code soit réutilisé (il contient également le fichier manifeste, mais pas de classe principale)

94
Bozho

Un fichier exécutable est un fichier jar qui a un fichier manifeste incorporé qui inclut la déclaration "Main-Class:". La "Main-Class" doit être définie de sorte que le runtime Java sache quelle classe appeler lorsque le jar est "exécuté"). Si un jar n'inclut pas de manifeste avec la "Main-Class: "ce n'est pas considéré comme un" pot exécutable "- c'est juste une bibliothèque de Java.

Je suppose que c'est la différence dans la façon dont Eclipse exporte le pot, mais pas à 100%.

Voir ce lien pour plus d'informations: http://www.skylit.com/javamethods/faqs/createjar.html

20
Andy White

Avec le fichier JAR standard, vous devez spécifier la classe avec la méthode principale sur la ligne de commande lors de l'exécution du jar. Avec un JAR exécutable, il existe un fichier manifeste qui contiendra ces informations afin que vous puissiez simplement taper Java -jar myRunnable.jar, ou double-cliquez simplement dessus.

14
Eric-Karl

Dans mon cas, j'avais l'habitude d'exporter en tant que jar quand j'avais toute la classe principale et tout le répertoire de chemin des bibliothèques spécifié dans manifest.mf. Si de nombreuses applications utilisent la même bibliothèque, il n'est pas nécessaire d'exporter la bibliothèque partagée pour chaque bocal. Cela rend le pot plus rapide. Mais, plusieurs fois en raison d'un problème de configuration dans un chemin de classe de serveur différent, il ne peut pas accéder à la bibliothèque et dans ce cas, il est logique d'exporter le fichier exécutable qui rend le fichier lent à exécuter et volumineux.

0
MR AND