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

87

J'écrivais 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 requis par le JAR.

Le MyApp.java commence comme une classe avec le paquet, les importations puis la classe publique MyAppet a une fonction principale, mais il est encore .java fichier! Je l'écris dans JDeveloper 11g si cela aide.

Des idées pour créer un JAR à partir de ces fichiers?

user1303007
la source
1
Je pense que cela peut être accompli beaucoup plus facilement en utilisant un outil d'emballage tel que ANT ou Maven
Churk
D'accord avec Chuck. Jetez un œil à ANT. Les IDE sont parfaits pour le développement, mais vous devez comprendre comment les choses fonctionnent. Les fichiers java sont compilés via javac vers des fichiers .class, après cela, les fichiers .class peuvent être empaquetés dans un fichier jar avec la commande jar. (Ant a des tâches pour faire cela, même jdeveloper a un assistant pour le faire).
BigMike
JDeveloper lui-même devrait avoir la capacité de créer des fichiers jar. Une recherche rapide sur google propose un guide ici: tompeez.wordpress.com/2011/06/01/…
stolzem
1
Pouvez-vous clarifier votre question?
Romain Hippeau
Allez dans le répertoire source et exécutez la commande: - javac * .java && jar cvf JarName.jar * .class
criard

Réponses:

102

Ouvrez une invite de commande.

Allez dans le répertoire où vous avez vos fichiers .java

Créer une construction de répertoire

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

javac -d ./build *.java

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

allez dans le répertoire de construction et effectuez un

jar cvf YourJar.jar *

Pour ajouter des commutateurs de ligne de commande manifest check jar

BigMike
la source
J'ai essayé de compiler à partir de la ligne de commande, mais j'obtiens une erreur: Frame1.java:23: le package oracle.jdeveloper.layout n'existe pas. Comment résoudre ce problème? Désolé pour les questions de débutant ...
user1303007
vous devez construire le classpath faisant référence à toutes les bibliothèques que vous référencez dans vos classes. Vérifiez avec votre installation de jdeveloper, il devrait y avoir un exemple de construction de fourmi (fichier build.xml) et au moins quelques bons tutoriels sur la façon d'utiliser jDeveloper avec ANT sur le site d'Oracle.
BigMike
@ user1303007 jetez un oeil ici oracle.com/technetwork/articles/adf/part4-098813.html
BigMike
1
J'ai ajouté une option à ma commande jar pour ajouter automatiquement la classe principale au manifeste ... jar cfe Main.jar Main *(je suis cependant confus, j'ai dû mettre le nom de la classe principale après le nom du fichier de sortie.)
Hydroper
31

Simplement avec la ligne de commande:

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

Bien sûr, les IDE évitent d'utiliser le terminal de ligne de commande

ab_dev86
la source
11
Ce qui précède a fonctionné, mais je devais spécifier le .classde myApp. Donc c'étaitjar -cf myJar.jar myApp.class
Navigatron
3
Des fautes d'orthographe ici aussi, et cela suppose qu'il n'y a pas de déclaration de package. Pas suffisant.
Marquis de Lorne du
14

Ok c'est la solution que j'aurais aimé trouver, à la place je l'écris ici:

Commencez par créer 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"

puis à partir de la ligne de commande:

   javac -cp /path/to/lib1.jar:/path/to/lib2.jar path/to/my/super/App.java

Notez que ce qui précède inclura plusieurs bibliothèques, si 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/

ce qui précède créera l'application avec son manifeste correspondant indiquant l'application comme classe principale.

L'inclusion des bibliothèques requises dans le fichier jar n'est pas possible en utilisant les paramètres de ligne de commande java ou jar.

Vous pouvez à la place:

  1. extraire manuellement les bibliothèques dans le dossier racine du fichier jar
  2. utilisez un IDE tel que Netbeans et insérez une règle dans la section post-jar de nbproject / build-impl.xml pour extraire les bibliothèques à l'intérieur du jar. Voir ci-dessous.
<target name="-post-jar">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
  <jar jarfile="${dist.jar}" update="true">  
            <zipfileset src="${dist.jar}" includes="**/*.class" />  
            <zipfileset src="${file.reference.iText-1.0.8.jar}" includes="**/*"/>
      <zipfileset src="${file.reference.itextpdf-3.2.1.jar}" includes="**/*"/>
  </jar>
    </target>

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

sarah.ferguson
la source
9

Souvent, vous souhaiterez spécifier un manifeste, comme ceci:

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

Ce qui se lit comme suit: "créer un fichier jarFilename détaillé manifestFilename", suivi des fichiers que vous souhaitez inclure. Verbose signifie imprimer des messages sur ce qu'il fait.

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

Evgeni Sergeev
la source
6

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

  1. Créez un projet séparé avec des packages (Create Project - Java - Java Class Library).
  2. Mettez vos classes .java là-bas.
  3. Construisez ce projet.
  4. Accédez au dossier de votre projet et recherchez les dossiers build et dist.
  5. Recherchez le fichier .jar dans votre dossier dist.
  6. Obtenez votre autre projet et ajoutez ce fichier .jar aux bibliothèques de projet.
  7. Vous pouvez désormais référencer les classes de cette bibliothèque et ses méthodes directement à partir du code, si l'importation est effectuée automatiquement pour vous.
Zon
la source
3

Voici une autre façon sophistiquée de faire cela:

$ ls | grep .java | xargs -I {} javac {} ; jar -cf myJar.jar *.class

Ce qui récupérera tous les fichiers .java ( ls | grep .java) de votre répertoire actuel et les compilera dans .class ( xargs -I {} javac {}), puis créera le fichier jar à partir des classes précédemment compilées ( jar -cf myJar.jar *.class).

Matthieu vdBiggelaar
la source
2

Le moyen le plus convivial pour les débutants de compiler un JAR à partir de votre code Java est peut-être d'utiliser un IDE (environnement de développement intégré; essentiellement un logiciel convivial pour le développement) comme Netbeans ou Eclipse.

  • Installez et configurez un IDE. Voici la dernière version d'Eclipse .
  • Créez un projet dans votre IDE et placez vos fichiers Java dans le dossier du projet.
  • Sélectionnez le projet dans l'EDI et exportez le projet en tant que JAR. Vérifiez à nouveau que les fichiers Java appropriés sont sélectionnés lors de l'exportation.

Vous pouvez toujours faire tout cela très facilement avec la ligne de commande. Assurez-vous que vous êtes dans le même répertoire que les fichiers ciblés avant d'exécuter une commande comme celle-ci:

javac YourApp.java
jar -cf YourJar.jar YourApp.class

... en remplaçant respectivement "YourApp" et "YourJar" les noms propres de vos fichiers.

Randall Arms Jr.
la source