112 votes

Comment créer un JAR à partir d'un fichier .java ?

J'étais en train d'écrire un programme simple en utilisant une application Java (pas une application qui a des projets, mais une application dans un projet; .java) qui a un seul cadre. Les deux fichiers sont .java donc je ne peux pas écrire un manifeste nécessaire pour le JAR.

Le MyApp.java commence comme une classe avec des packages, des imports puis une classe publique MyApp et a une fonction principale, mais c'est toujours un fichier .java ! Je l'écris dans JDeveloper 11g si cela aide.

Des idées sur la façon de créer un JAR à partir de ces fichiers ?

2 votes

Je pense que cela peut être accompli beaucoup plus facilement en utilisant un outil d'emballage tel que ANT ou Maven

0 votes

D'accord avec Chuck. Jetez un coup d'œil à ANT. Les IDE sont très utiles pour le développement, mais il est nécessaire de comprendre comment les choses fonctionnent. Les fichiers java sont compilés via javac en fichiers .class, ensuite, les fichiers .class peuvent être regroupés dans un fichier jar avec la commande jar. (Ant propose des tâches pour cela, même jdeveloper dispose de quelques assistants pour le faire).

0 votes

JDeveloper lui-même devrait avoir la capacité de créer des fichiers jar. Une recherche rapide sur Google donne un tutoriel ici : tompeez.wordpress.com/2011/06/01/…

137voto

BigMike Points 3443

Ouvrez une invite de commande.

Allez dans le répertoire où se trouvent vos fichiers .java

Créez un répertoire build

Exécutez la compilation Java à partir de la ligne de commande

javac -d ./build *.java

s'il n'y a pas d'erreurs, dans le répertoire build vous devriez avoir votre arborescence de classes

déplacez-vous dans le répertoire build et faites un

jar cvf VotreJar.jar *

Pour ajouter des informations au manifeste, consultez les commutateurs de ligne de commande de la commande jar

0 votes

J'ai essayé de compiler à partir de la ligne de commande, mais je reçois une erreur : Frame1.java:23: le package oracle.jdeveloper.layout n'existe pas. Comment puis-je résoudre cela ? Désolé pour les questions de débutant...

0 votes

Vous devez construire le classpath en faisant référence à toutes les bibliothèques que vous utilisez dans vos classes. Vérifiez avec votre installation de JDeveloper, il devrait y avoir un exemple de construction ant (fichier build.xml) et au moins quelques bons tutoriels sur la façon d'utiliser JDeveloper avec ANT sur le site d'Oracle.

0 votes

43voto

ab_dev86 Points 1874

Simplement avec la ligne de commande :

javac MyApp.java
jar -cf myJar.jar MyApp.class

Les IDEs évitent d'utiliser le terminal de ligne de commande

11 votes

Le code ci-dessus a fonctionné, cependant j'ai dû spécifier la .class de mon application. Donc c'était jar -cf myJar.jar myApp.class

4 votes

Erreurs d'orthographe ici aussi, et cela suppose qu'il n'y a pas d'instruction package. Pas adéquat.

0 votes

Cela a fonctionné. Est-ce que quelqu'un peut décoder ce qui se passe ici? Qu'est-ce que -cf?

21voto

sarah.ferguson Points 391

Ok voici la solution que j'aurais aimé trouver, au lieu de cela je l'écris ici:

Créez d'abord la structure de répertoires correspondant au package défini pour le fichier .java, si c'est my.super.application créez le répertoire my et à l'intérieur super et à l'intérieur le fichier .java App.java

ensuite en ligne de commande :

javac -cp /chemin/vers/lib1.jar:/chemin/vers/lib2.jar chemin/vers/my/super/App.java

Remarquez que le code ci-dessus inclura plusieurs bibliothèques, si vous êtes sous Windows utilisez "," pour séparer plusieurs fichiers sinon sous GNU/Linux utilisez ":" Pour créer un fichier jar

jar -cvfe App.jar App my/app/

le code ci-dessus créera l'application avec son Manifest correspondant indiquant App comme la classe principale.

Il n'est pas possible d'inclure les bibliothèques requises à l'intérieur du fichier jar en utilisant les paramètres de ligne de commande java ou jar.

Vous pouvez plutôt:

  1. extraire manuellement les bibliothèques dans le dossier racine du fichier jar
  2. utiliser un IDE tel que Netbeans et insérer une règle à l'intérieur de la section post-jar de nbproject/build-impl.xml pour extraire les bibliothèques à l'intérieur du jar. Voir ci-dessous.

les noms file.reference se trouvent dans le fichier project.properties après avoir ajouté les bibliothèques à l'IDE Netbeans.

11voto

Evgeni Sergeev Points 1517

Vous voudrez souvent spécifier un manifeste, comme ceci :

jar -cvfm myJar.jar myManifest.txt myApp.class

Cela se lit : "créer en verbeux jarFilename manifestFilename", suivi des fichiers que vous souhaitez inclure. Verbeux signifie afficher des messages sur ce qu'il est en train de faire.

Notez que le nom du fichier de manifeste que vous fournissez peut être n'importe quoi, car jar le renommera automatiquement et le placera dans le bon répertoire à l'intérieur du fichier jar.

6voto

Zon Points 518

Cela peut être fait sans terminal, directement depuis l'IDE. Netbeans, par exemple.

  1. Créez un projet séparé avec des packages (Créer un projet - Java - Bibliothèque de classes Java).
  2. Placez vos classes .java là-bas.
  3. Compilez ce projet.
  4. Allez dans le dossier de votre projet et trouvez les dossiers build et dist.
  5. Trouvez le fichier .jar dans votre dossier dist.
  6. Prenez votre autre projet et ajoutez ce fichier .jar aux bibliothèques du projet.
  7. Vous pouvez maintenant référencer les classes de cette bibliothèque et ses méthodes directement depuis le code, si l'importation est faite automatiquement pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X