Comment utiliser des classes à partir de fichiers .jar?

134

J'ai lu les didacticiels Java sur Sun pour les fichiers JAR, mais je ne trouve toujours pas de solution à mon problème. J'ai besoin d'utiliser une classe à partir d'un fichier jar appelé jtwitter.jar, j'ai téléchargé le fichier et essayé de l'exécuter (j'ai découvert hier que les fichiers .jar peuvent être exécutés en double-cliquant dessus) et Vista m'a donné une erreur en disant " Échec du chargement de l'attribut Manifest de la classe principale à partir de [chemin] /jtwitter.jar ".

Le gars qui a codé le fichier .jar veut que je l'importe, mais où dois-je stocker le fichier .jar pour l'importer dans mon code? J'ai essayé de mettre le fichier .jar et mon fichier .java dans le même répertoire, cela n'a pas fonctionné.

Le fichier pour lequel j'essaie de travailler est ici: http://www.winterwell.com/software/jtwitter.php

J'utilise JCreator LE.

Gaurav Dadhania
la source
13
Pourquoi y a-t-il un vote négatif? À mon avis, c'est une bonne question et il y a des informations intéressantes dans les réponses! (+1)
guerda

Réponses:

34

Tous les fichiers jar ne sont pas exécutables.

Maintenant, vous devez importer les classes, qui sont là sous le jar, dans votre fichier java. Par exemple,

import org.xml.sax.SAXException;

Si vous travaillez sur un IDE, vous devez vous référer à sa documentation. Ou au moins spécifiez celui que vous utilisez ici dans ce fil. Cela nous permettrait certainement de vous aider davantage.

Et si vous n'utilisez aucun IDE, regardez l' option javac -cp . Cependant, il est préférable de regrouper votre programme dans un jarfichier et d'y inclure tous les éléments requis jar. Ensuite, afin d'exécuter votre jar, comme,

java -jar my_program.jar

vous devriez avoir un META-INF/MANIFEST.MFfichier dans votre fichier jar. Voir ici , pour savoir comment faire.

Adeel Ansari
la source
vieux, je sais, mais en fait, il n'y a besoin de importrien - cela évite simplement d'avoir à écrire le nom de classe complet quelle que soit la classe utilisée, permettant juste le nom de classe simple ( SAXException) - sorte de simplement importer l'espace de noms
user85421
173

Disons que nous devons utiliser la classe Classnamecontenue dans le fichier jarorg.example.jar

Et votre source est dans le fichier mysource.javacomme ceci:

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

Tout d'abord, comme vous le voyez, dans votre code, vous devez importer les classes. Pour ce faire, vous avez besoinimport org.example.Classname;

Deuxièmement, lorsque vous compilez la source, vous devez référencer le fichier jar.

Veuillez noter la différence entre l'utilisation :et la ;compilation

  • Si vous êtes sous un système d'exploitation de type Unix:

    javac -cp '.:org.example.jar' mysource.java
  • Si vous êtes sous Windows:

    javac -cp .;org.example.jar mysource.java

Après cela, vous obtenez le fichier bytecode mysource.class

Vous pouvez maintenant exécuter ceci:

  • Si vous êtes sous un système d'exploitation de type Unix:

    java -cp '.:org.example.jar' mysource
  • Si vous êtes sous Windows:

    java -cp .;org.example.jar mysource
GabrieleV
la source
4
Pourriez-vous expliquer un peu plus cette notation? Cela a résolu mon problème, mais malheureusement, je n'ai aucune idée de ce que le point-virgule / deux-points signifie dans ce cas particulier.
cemulate le
2
Cette histoire de point-virgule / deux-points m'a coûté toute la journée. Au moins je l'ai trouvé maintenant, merci!
Maxim Zubarev
1
@ChaseMeadors Le point - virgule / deux - points signifie essentiellement "et" ici. Il se sépare .de org.example.jar.
duozmo
Si vous survolez, faites une distinction avec la plupart des *PATHvariables: les fichiers .jar doivent être nommés individuellement .
duozmo
15

Vous devez ajouter le fichier jar dans le chemin de classe. Pour compiler votre classe java:

javac -cp .;jwitter.jar MyClass.java

Pour exécuter votre code (à condition que MyClass contienne une méthode principale):

java -cp .;jwitter.jar MyClass

Vous pouvez avoir le fichier jar n'importe où. Ce qui précède fonctionne si le fichier jar se trouve dans le même répertoire que votre fichier java.

kgiannakakis
la source
7

Vous devez placer le fichier .jar dans votre chemin de classe lors de la compilation / exécution de votre code. Ensuite, vous utilisez simplement les importations standard des classes dans le .jar.

workmad3
la source
6

Comme le dit workmad3, vous avez besoin que le fichier jar se trouve dans votre chemin de classe. Si vous compilez à partir de la ligne de commande, cela signifie utiliser l'indicateur -classpath. (Évitez la variable d'environnement CLASSPATH; c'est une douleur dans le cou IMO.)

Si vous utilisez un IDE, veuillez nous indiquer lequel et nous pouvons vous aider avec les étapes spécifiques à cet IDE.

Jon Skeet
la source
La variable classpath env est utile si vous utilisez des scripts ou quelque chose comme firedaemon pour exécuter votre application. Ce n'est qu'une douleur lorsque vous l'utilisez globalement :)
workmad3
J'aime toujours le voir explicitement.
Jon Skeet
Je suis d'accord, j'aime le voir explicitement.
J3r3myK