bibliotheken nur via kommandozeile laden

I-Doetzken

Mitglied
Hallo,

ich schreibe eine kleine Applikation, die via UNO LibreOffice benutzt.

Damit das klappt, müssen verschiedene jar-Dateien von LibreOffice eingebunden werden.
(java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoloader.jar, unoil.jar)

Wenn ich sie in den ClassPath in meiner Manifestdatei eintrage, funktioniert auch alles.

!!! Ich weis aber ja nicht, wie die Pfade auf anderen Rechnern aussehen !!!

Lasse ich sie weg und starte das Programm mit
java -cp <allePfade/allesJars> -jar MyApplication.jar
startet das Programm zwar, doch in dem Moment, wenn LibreOffice ins spiel kommt, schmeist es eine Exception:

"Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: com/sun/star/comp/helper/BootstrapException"

Wie kann ich das Problem lösen, also dass der Benutzer später "seine" korrekten Pfade setzen kann?

Vielen Dank für alle Tipps!
 
G

Gast2

Gast
Du kannst relative Pfade angeben.
Die zusätzlichen Bibliotheken kannst du z.b. in einen lib/ ordner auf höhe deiner jar datei packen.
Als Pfad gibst du dann lib/java_uno.jar etc. an.
Dann ist später egal wo dein Programm liegt.
 

I-Doetzken

Mitglied
Hallo,

wenn ich dich richtig verstanden habe, soll ich einfach die LibreOffice-jar-Dateien
Java:
/opt/libreoffice3.4/ure/share/java/java_uno.jar
/opt/libreoffice3.4/ure/share/java/juh.jar
/opt/libreoffice3.4/ure/share/java/jurt.jar
/opt/libreoffice3.4/ure/share/java/ridl.jar
/opt/libreoffice3.4/ure/share/java/unoloader.jar
/opt/libreoffice3.4/basis3.4/program/classes/unoil.jar
in einen Ordner in meinem Projekt kopieren und mit meinem Programm mitliefern?

Das erscheint mir nicht so optimal. Ich befürchte, dass es zu Inkompatiblitäten mit verschiedenen LibreOffice-Versionen kommen kann.

Mir wäre es lieber, wenn der Benutzer einmal den Pfad zu seiner LibreOffice-Installation angibt und diese dann genutzt wird.

Ich suche also z.B. einen Weg meinem Programm die externen Bibliotheken als Option mitzugeben.

Vielen Dank für alle Tipps!

Beste Grüße
 

mvitz

Top Contributor
Dann gibt es wohl nur die Möglichkeit das "java -jar" in einer .sh/.bat Datei zu kapseln und den classpath dort "manuell" aufzubauen.
 

I-Doetzken

Mitglied
@mvitz:

Ja das wäre eine Möglichkeit, leider gelingt mir das aber nicht.

Wenn ich den ClassPath in der Manifestdatei eintrage, klappt alles.
Java:
java -jar MyApp.jar
startet mit allen Funktionen.

Wenn ich den ClassPath aber nicht in die Manfestdatei eintrage .... :
Java:
export CLASSPATH=$CLASSPATH:.:alle:notwendigen:jars
java -jar MyApp.jar
startet nur mit eingeschränkter Funktionalität.
Sobald eine LibreOffice-Funktion gestartet wird, gibt es folgende Exception:

Java:
Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: com/sun/star/comp/helper/BootstrapException


Witzigerweise kann ich das ungepackte Programm mit allen Funktionen so starten:
Java:
export CLASSPATH=$CLASSPATH:.:alle:notwendigen:jars
java myApp.myPackage.Main

Meine Frage ist also: Wie kann ich ein Jar erzeugen, dem ich im nachhinein einen ClassPath mitgeben kann?


Vielen Dank für jeden Tipp!

Beste Grüße
 

I-Doetzken

Mitglied
@ariol

Danke für den Tipp!
Das sieht sehr interessant aus.

Ich habe den ClassPath erfolgreich neu geschrieben.
Leider gibt es immer folgende Exception:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /opt/libreoffice3.4/ure/share/java/java_uno.jar: /opt/libreoffice3.4/ure/share/java/java_uno.jar: invalid ELF header (Possible cause: endianness mismatch)

Vielen dank für weitere Tipps!
Beste Grüße
 

mvitz

Top Contributor
Geht z.B. so
Code:
CP=alle:notwendigen:jars:und:deine:jar
java -cp $CP myApp.myPackage.Main
 

I-Doetzken

Mitglied
Hallo,

danke mvitz für deine Hilfe, aber wie ich oben geschrieben habe, ist folgendes kein Problem:
Java:
export CLASSPATH=$CLASSPATH:.:alle:notwendigen:jars
java myApp.myPackage.Main

Ein Problem ist es, wenn ich versuche, das gepackte Programm zu starten.

Java:
export CLASSPATH=$CLASSPATH:.:alle:notwendigen:jars
java -jar MyApp.jar
// oder 
java -cp $CLASSPATH -jar MyApp.jar
// führt zu :
Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: com/sun/star/comp/helper/BootstrapException

Vielen Dank für weitere Tipps!
Beste Grüße
 

mvitz

Top Contributor
Das liegt daran, das bei java -jar nur der Classpath aus dem Manifest genommen wird. Da du den nunmal nicht eindeutig setzen kannst, hilft eben nur das aufrufen von java -cp ... de.package.Klasse . Das exportieren von CLASSPATH ist heute nicht mehr üblich, sondern alles was du darein packst, solltest du einfach per -cp CLASSPATH übergeben.
 

Ariol

Top Contributor
Hab mal was gebastelt :wink:

Versuch mal ob das klappt:
Java:
	public static void addToClassPath(String path) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, IOException
	{
		File file = new File(path);
		System.setProperty("java.class.path", System.getProperty("java.class.path") + ";" + file.getCanonicalPath());
		Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
		addURL.setAccessible(true);
		addURL.invoke(ClassLoader.getSystemClassLoader(), file.toURI().toURL());
	}
 

I-Doetzken

Mitglied
@mvitz

heißt das, dass ich das Programm nicht als Jar auslieferen kann,
sondern nur als "Ordner-Hierarchie mit Class-Dateien"?

Vielen Dank!

Beste Grüße
 

mvitz

Top Contributor
Doch, du kannst ja dein JAR ganz normal packen, wie vorher auch.

Danach musst du eben das ganze ungefähr so aufrufen:
Code:
java -cp deinJar.jar:/opt/uno.jar:/opt/nocheinjar.jar de.package.Klasse
 

I-Doetzken

Mitglied
Jau das hat geklappt!!

In der Bash erscheint zwar eine Fehlermeldung.

Java:
Exception in thread "main" java.lang.NoClassDefFoundError: myPackage/MyApp
Caused by: java.lang.ClassNotFoundException: myPackage/MyApp
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: myPackage/MyApp. Program will exit.

Trotzdem startet das Programm mit allen Funktionen :)

Vielen Dank!!
Beste Grüße
 

I-Doetzken

Mitglied
@ariol

hallo,
ich habe deinen code noch nicht ausprobiert, das mache ich morgen.

die fehlermeldung oben kam daher, dass ich in dem startscript mittlerweile kraut und rueben hatte und eine zeile eines vorherigen versuches nicht auskommentiert hatte.

Vielen Dank noch mal!!
Gute Nacht!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Was sind Bibliotheken in Java/Pyhton? Allgemeine Java-Themen 1
C Bibliotheken für Algorithmische Geometrie Allgemeine Java-Themen 2
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
B Fat Jar mit externen Bibliotheken Allgemeine Java-Themen 20
D JNI->kann abhängige Bibliotheken einer DLL nicht finden Allgemeine Java-Themen 4
G Webstart Java Web Start und native Bibliotheken Allgemeine Java-Themen 3
F Laden von externen Bibliotheken Allgemeine Java-Themen 3
D Darf ich jakarta bibliotheken ohne weiteres nutzen? Allgemeine Java-Themen 10
KrokoDiehl thread-unsichere, native Bibliotheken Allgemeine Java-Themen 11
SuperSeppel13 Dynamische Bibliotheken einbinden Allgemeine Java-Themen 16
H importierte Bibliotheken in Applet? Allgemeine Java-Themen 4
L Bibliotheken um Videos abzuspielen Allgemeine Java-Themen 4
D Ahängige Bibliotheken (JARs) ermitteln Allgemeine Java-Themen 6
G Hardwarenahe Bibliotheken für Java? Allgemeine Java-Themen 2
K Applet dass auf mehrere Bibliotheken zugreift Allgemeine Java-Themen 13
R Dynamisches Laden von JNI-Bibliotheken Allgemeine Java-Themen 4
Q Bibliotheken mit ins eigene Jar aufnehmen Allgemeine Java-Themen 4
M Bibliotheken löschen <Problem> Allgemeine Java-Themen 12
J Bibliotheken erst zur Laufzeit laden Allgemeine Java-Themen 5
G Laden von Bibliotheken Allgemeine Java-Themen 4
M günstigen Weg zum Auffinden nicht benötigter Bibliotheken Allgemeine Java-Themen 8
X JasperReports Bibliotheken Einbinden Allgemeine Java-Themen 2
G Latex/Tex Bibliotheken für Java? Allgemeine Java-Themen 5
G Installation diverser Bibliotheken in Eclipse. Allgemeine Java-Themen 3
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
M Threads über Kommandozeile Allgemeine Java-Themen 5
J Sudoku Kommandozeile Allgemeine Java-Themen 13
K Input/Output Enter der OS-Kommandozeile nachstellen Allgemeine Java-Themen 4
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M Kommandozeile und Sonderzeichen Allgemeine Java-Themen 2
J mailx Kommandozeile Allgemeine Java-Themen 5
W Probleme beim Ausführen einer Java Klasse auf Kommandozeile Allgemeine Java-Themen 17
M Kommandozeile von Windows steuern Allgemeine Java-Themen 2
A Bild über Kommandozeile ausgeben? Allgemeine Java-Themen 8
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L Seite einer Partner Website neu laden Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
L Mapdaten laden Allgemeine Java-Themen 10
B Aktuellen Sourcecode aus Browser laden Allgemeine Java-Themen 43
HoloYoitsu Kann .dll nur aus Eclipse heraus laden Allgemeine Java-Themen 7
F Teil eines Bildes laden Allgemeine Java-Themen 1
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
V Input/Output Gif Bilder Animiert aus einer Jar laden Allgemeine Java-Themen 4
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
C BufferedImages in Jar laden. Allgemeine Java-Themen 1
G StackoverflowError beim laden einer FXMML Datei Allgemeine Java-Themen 1
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
A Anderes Fenster neu laden Allgemeine Java-Themen 16
N Daten aus Jar laden Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
R Java Array speichern & laden Allgemeine Java-Themen 23
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
Z Bilder aus JAR laden Allgemeine Java-Themen 2
D Ressourcen(config) laden Allgemeine Java-Themen 11
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
S IMAGE ARRAY laden Allgemeine Java-Themen 6
J Methoden Fehler beim serialisieren und laden!? help Allgemeine Java-Themen 4
Grejak 2D-Grafik Resourcen laden Allgemeine Java-Themen 4
firefexx ResourceBundle laden Allgemeine Java-Themen 2
V Klassen in "abgeschirmten Bereich" laden? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben