Wie verwende ich Klassen aus JAR-Dateien?

134

Ich habe die Java-Tutorials zu Sun für JAR-Dateien gelesen, kann aber immer noch keine Lösung für mein Problem finden. Ich muss eine Klasse aus einer JAR-Datei namens jtwitter.jar verwenden. Ich habe die Datei heruntergeladen und versucht, sie auszuführen (ich habe gestern herausgefunden, dass JAR-Dateien ausgeführt werden können, indem ich darauf doppelklicke). Vista hat mir die Fehlermeldung " Fehler beim Laden des Hauptklassen-Manifest-Attributs aus [Pfad] /jtwitter.jar ".

Der Typ, der die JAR-Datei codiert hat, möchte, dass ich sie importiere, aber wo speichere ich die JAR-Datei, um sie in meinen Code zu importieren? Ich habe versucht, sowohl die JAR-Datei als auch meine Java-Datei in dasselbe Verzeichnis zu stellen. Dies hat nicht funktioniert.

Die Datei, für die ich arbeiten möchte, befindet sich hier: http://www.winterwell.com/software/jtwitter.php

Ich benutze JCreator LE.

Gaurav Dadhania
quelle
13
Warum gibt es eine Ablehnung? Meiner Meinung nach ist es eine gute Frage und die Antworten enthalten interessante Informationen! (+1)
Guerda

Antworten:

34

Nicht jede JAR-Datei ist ausführbar.

Jetzt müssen Sie die Klassen, die sich unter der JAR befinden, in Ihre Java-Datei importieren. Beispielsweise,

import org.xml.sax.SAXException;

Wenn Sie an einer IDE arbeiten, sollten Sie deren Dokumentation lesen. Oder geben Sie zumindest an, welche Sie hier in diesem Thread verwenden. Es würde uns definitiv ermöglichen, Ihnen weiter zu helfen.

Und wenn Sie keine IDE verwenden, schauen Sie sich bitte die Option javac -cp an . Es ist jedoch viel besser, Ihr Programm in eine jarDatei zu packen und alle erforderlichen jars darin aufzunehmen. Dann, um Ihre auszuführen jar, wie

java -jar my_program.jar

Sie sollten eine META-INF/MANIFEST.MFDatei in Ihrem haben jar. Anleitungen finden Sie hier .

Adeel Ansari
quelle
alt, ich weiß, aber eigentlich ist nichts nötig import- es wird nur vermieden, dass der vollständig qualifizierte Klassenname geschrieben werden muss, wer auch immer die Klasse verwendet wird, und es wird nur der einfache Klassenname ( SAXException) zugelassen
sozusagen
173

Angenommen, wir müssen die Klasse verwenden Classname, die in der JAR-Datei enthalten istorg.example.jar

Und Ihre Quelle befindet sich in der Datei mysource.javawie folgt :

import org.example.Classname;

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

Wie Sie sehen, müssen Sie zunächst in Ihrem Code die Klassen importieren. Dazu brauchst duimport org.example.Classname;

Zweitens müssen Sie beim Kompilieren der Quelle auf die JAR-Datei verweisen.

Bitte beachten Sie den Unterschied bei der Verwendung :und ;beim Kompilieren

  • Wenn Sie unter einem Unix-ähnlichen Betriebssystem arbeiten:

    javac -cp '.:org.example.jar' mysource.java
  • Wenn Sie unter Windows sind:

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

Danach erhalten Sie die Bytecode-Datei mysource.class

Jetzt können Sie Folgendes ausführen:

  • Wenn Sie unter einem Unix-ähnlichen Betriebssystem arbeiten:

    java -cp '.:org.example.jar' mysource
  • Wenn Sie unter Windows sind:

    java -cp .;org.example.jar mysource
GabrieleV
quelle
4
Könnten Sie diese Notation etwas näher erläutern? Dies hat mein Problem behoben, aber leider habe ich keine Ahnung, was das Semikolon / Doppelpunkt in diesem speziellen Fall bedeutet.
Cemulate
2
Diese Semikolon- / Doppelpunktgeschichte hat mich den ganzen Tag gekostet. Zumindest habe ich es jetzt gefunden, danke!
Maxim Zubarev
1
@ChaseMeadors Das Semikolon / Doppelpunkt bedeutet hier im Wesentlichen "und". Es trennt sich .von org.example.jar.
Duozmo
Beachten Sie beim Überfliegen einen Unterschied zu den meisten *PATHVariablen: JAR-Dateien müssen einzeln benannt werden .
Duozmo
15

Sie müssen die JAR-Datei im Klassenpfad hinzufügen. So kompilieren Sie Ihre Java-Klasse:

javac -cp .;jwitter.jar MyClass.java

So führen Sie Ihren Code aus (vorausgesetzt, MyClass enthält eine Hauptmethode):

java -cp .;jwitter.jar MyClass

Sie können die JAR-Datei überall haben. Die obigen Schritte funktionieren, wenn sich die JAR-Datei im selben Verzeichnis wie Ihre Java-Datei befindet.

kgiannakakis
quelle
7

Sie müssen die JAR-Datei in Ihren Klassenpfad einfügen, wenn Sie Ihren Code kompilieren / ausführen. Dann verwenden Sie einfach Standardimporte der Klassen in der .jar.

workmad3
quelle
6

Wie workmad3 sagt, muss sich die JAR-Datei in Ihrem Klassenpfad befinden. Wenn Sie über die Befehlszeile kompilieren, bedeutet dies, dass Sie das Flag -classpath verwenden. (Vermeiden Sie die Umgebungsvariable CLASSPATH; es ist ein Schmerz im Nacken IMO.)

Wenn Sie eine IDE verwenden, teilen Sie uns bitte mit, welche und wir können Ihnen bei den für diese IDE spezifischen Schritten helfen.

Jon Skeet
quelle
Die env-Variable classpath ist nützlich, wenn Sie zum Ausführen Ihrer App Skripts oder ähnliches wie fireaemon verwenden. Es ist nur ein Schmerz, wenn Sie es global verwenden :)
workmad3
Ich sehe es immer noch gerne explizit.
Jon Skeet
Ich stimme zu, ich sehe es gerne explizit.
J3r3myK