web-dev-qa-db-fra.com

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

J'écrivais un programme simple en utilisant une application Java (pas une application qui a des projets, mais une application au sein d'un projet; .Java) qui possède un seul cadre. Les deux fichiers sont .Java, donc je Impossible d’écrire un manifeste requis par le fichier JAR. MyApp.Java commence comme une classe avec package, puis importe la classe publique MyApp {et a une fonction principale, mais c’est toujours. Java! Je l’écris dans JDeveloper 11g si aide ...

Des idées comment faire un JAR à partir de ces fichiers?

64
user1303007

Ouvrez une invite de commande.

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

Créer une construction de répertoire

Exécuter Java compilation à 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 arbre de classe

déplacez vers le répertoire de construction et faites un

jar cvf YourJar.jar *

Pour ajouter des commutateurs de ligne de commande de jar de vérification de manifeste

80
BigMike

Simplement avec la ligne de commande:

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

Les IDE sûrs évitent d'utiliser un terminal en ligne de commande

24
ab_dev86

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

Commencez par créer la structure de répertoires correspondant au package défini pour le fichier .Java. S'il s'agit de mon.super.application, créez le répertoire "my" et, à l'intérieur, "super" et à l'intérieur, le fichier .Java "App.Java".

puis en 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 en indiquant l'application comme classe principale.

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

Vous pouvez plutôt:

  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 de fichier.référence se trouvent dans le fichier project.properties après avoir ajouté les bibliothèques à l'EDI Netbeans.

11
sarah.ferguson

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

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

Ce qui se lit comme suit: "Créer un nomJarFilename bavarois NomFichierManifest", 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 jar le renommera automatiquement et le placera dans le bon répertoire du fichier jar.

7
Evgeni Sergeev

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 trouvez-y 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 maintenant référencer les classes de cette bibliothèque et ses méthodes directement à partir de code, si l'importation est automatiquement effectuée pour vous.
6
Zon

Voici une autre manière élégante de faire ceci:

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

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

2