Java .jar als Bibliothek benutzen

Fireball89

Captain
Registriert
Aug. 2007
Beiträge
3.498
Hallo,

versuche mich grad an einer einfachen Java Anwendung incl. der OAuth Library Scribe.

Habe dort die "Getting Started" gelesen, aber ich bekomme das dusselige JAR nicht eingebunden.

Code:
import org.scribe.*;
Damit importiere ich das Package in meiner Klasse.

Damit der Compiler das Package findet:
Code:
javac -cp .;scribe.jar meineApplikation.java

Aber der Compiler findet das dämliche Package einfach nicht! Was mach ich falsch?
 
Arbeitest du mit einer ide? das macht die sache etwas einfacher.

ich vermute mal, das bei deinem unterem befehl irgendwie nicht die lib gefunden wird, da er den pfad nicht kennt oder ähnliches.

probier es sonst mal mit dem hier:

export CLASSPATH=$CLASSPATH:/pfad/zur/bib/bib.jar
 
Zuletzt bearbeitet:
Er gibt ja schon explizit einen Classpath an.

Wenn du unter Linux arbeitest musst du die Pfade evtl. mit einem Doppelpunkt statt Semikolon trennen.
 
@Shagg:
Klappt nicht. Ich benutze keine IDE und arbeite unter Windows.

Es ist wirklich nur ein kleines Testprogramm um die Funktionalität von OAuth zu verstehen.

Ich verstehs nicht. Der Pfad zum JAR ist richtig, aber org.scribe kann nicht gefunden werden.
 
Jap, hab ich schon drei Mal kontrolliert. Hab die Datei schon an andere Stelle verschoben und es mit einem absoluten Pfad versucht ... keine Besserung.
 
@M0rpHeU5:
Fireball89 schrieb:
Ich benutze keine IDE und arbeite unter Windows.

Es ist wirklich nur ein kleines Testprogramm um die Funktionalität von OAuth zu verstehen.
 
Welche Fehlermeldung wirft der Compiler denn? Quelltext wäre auch hilfreich.
 
Naja der Quelltext spielt keine große Rolle. Ich versuch halt erstmal den import.
Compilerfehlermeldung: "package org.scribe does not exist"
Und logischerweise jede Menge "cannot find symbol"
 
Es gibt drei Möglichkeiten. Entweder etwas mit den Pfaden stimmt nicht. Oder mit der scribe.jar. Oder mit dem Quelltext.

Der Aufruf des Compilers sieht gut aus. Immer gesetzt den Fall, die Pfade stimmen, d.h. sowohl die Datei "meineApplikation.java", als auch "scribe.jar" liegen im aktuellen Verzeichnis (was einigermaßen ungewöhnlich ist, aber für die ersten Schritte mag es angehen).

Als nächstes würde ich schauen, ob die "scribe.jar" valide ist und die gewünschten Klassen auch tatsächlich enthält.

Und dann ist eben doch der Quelltext an der Reihe. Könnte sein, dass Du hier einen Fehler gemacht hast. Die Fehlermeldung deutet aber in der Tat auf ein anderes Problem.
 
Ich hab gerade mal in die scribe-1.3.0.jar von der verlinkten Webseite reingeguckt.

Im Package org.scribe sind keine Klassen drin, sondern "nur" in Unterpackages davon. Du musst jedes Package exakt einbinden, org.scribe.* alleine reicht nicht.

Für den OAuthService also z.B.
Code:
import org.scribe.oauth.*
und für den ServiceBuilder
Code:
import org.scribe.builder.*;
Für die anderen Klassen, die du benutzt, eben entsprechend (nicht nur für scribe, sondern allgemein)
 
@Cobinja:
LOL. Vielen Dank!
Also damit import org.scribe.* funktioniert muss es auf jeden Fall eine Klasse mit package org.scribe geben?
 
Muss nicht unbedingt eine Klasse sein. Kann auch ein Interface oder eine Enum oder eine Annotation oder ... sein. Der Stern bezieht sich quasi auf alles ausser Unterpackages (mit ihren Inhalten).
 
Alles klar, wieder was dazu gelernt.
Aber seltsamerweise lässt sich mein Programm nicht ausführen. Er findet die main-methode in der Klasse nicht.

Mein Aufruf
Code:
java -cp scribe.jar meineApplikation

die Manifest-Datei in der scribe.jar hat keine main-class, also müsste er doch automatisch die main methode meiner einzelnen Klasse nehmen, oder?

//edit:
Der genaue Fehler
Code:
Fehler: Hauptklasse meineApplikation konnte nicht gefunden oder geladen werden
 
//edit: Hier stand Blödsinn

Wie hast du denn deine main-methode deklariert? Hast du ganz am Anfang von MeineApplikation.java noch was stehen a la
Code:
package meine.applikation;
Wenn ja dann
Code:
java -cp .:scribe.jar meine.applikation.meinApplikation
 
Zuletzt bearbeitet:
nein, kein package. Ich habe zum Test mal die Klasse auf die imports und die Klassendefinition reduziert.
Innerhalb davon nur eine leere, aber richtig deklarierte main.
 
Quelltext posten!

In Java verwendet man für Klassennamen übrigens gängigerweise CamelCase, d.h. der Name beginnt mit einem Großbuchstaben.
Ergänzung ()

Fireball89 schrieb:
Mein Aufruf
Code:
java -cp scribe.jar meineApplikation

die Manifest-Datei in der scribe.jar hat keine main-class, also müsste er doch automatisch die main methode meiner einzelnen Klasse nehmen, oder?

Die in der Manifest-Datei deklarierte Main-Class wird nur genommen, wenn man den Launcher mit dem -jar Argument startet:

Code:
java -jar myjar.jar
 
Zurück
Oben