Montag, 25. Juni 2007

Openoffice via Java-Uno anbinden - Classpath-Probleme

Die Problemstellung ist, Openoffice via Bootstrap-Methode anzubinden. Openoffice wird dann durch die UNO-libraries gestartet und UNO läuft in der selben JVM. Es gibt noch weitere Methoden, um Openoffice anzusprechen, wie über IP oder SharedMemory. Diese Möglichkeiten sollen hier nicht besprochen werden.

[Hier sollten evtl. noch ein paar einleitende Informationen oder Beispiele zur Kontaktaufnahme mit UNO/openoffice stehen. Das habe ich noch nicht geschafft zusammenzuschreiben, siehe dazu
http://udk.openoffice.org/]

1. Problem: UNO meldet "office executable not found"

Grund:

UNO sucht nach Office-Programm (soffice oder soffice.exe) via Ressourcenladen im normalen Classloader.

Lösung:

UNO-jars aus dem Verzeichnis laden, wo auch das Office-Programm liegt. (Windows üblicherweise "C:/Programme/OpenOffice.org 2.0/program", Linux üblicherweise "/usr/lib/openoffice/program").

Problem ist, dass in manchen Systemen die Jar-Dateien nicht in diesem Verzeichnis liegen (Beispiel ubuntu 7.04: /usr/share/java/openoffice/).

Außerdem muß man für diese Lösung den Classpath abhängig von der Office-Installation ändern. Natürlich gibt es Möglichkeiten auch zur Laufzeit einen URL-Classloader zu bauen, der auf ein konfigurierbares Office-Verzeichnis zeigt, aber dann tritt eben noch das 2. Problem auf, s.u.

Lösung für beanshell:

Die beanshell hat ihren eigenen Classloader, so daß die o.g. Lösung (dynamischer URL-Classloader) nicht funktioniert. Allerdings kann man mit folgender Zeile:

addClassPath( "/usr/lib/openoffice/program/" )

in der aktuellen Instanz von bsh.Interpreter das gleiche erreichen.

2. Problem: UNO-native libraries können nicht geladen werden, Meldung: java.lang.UnsatisfiedLinkError:
com.sun.star.lib.connections.pipe.PipeConnection.createJNI(Ljava/lang/String;)I

Lösung Linux/Windows:

JVM-Aufrufparameter nutzen:
-Djava.library.path=/usr/lib/openoffice/program/

Alternative Lösung Linux:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/openoffice/program/

Alternative Lösung Windows:

SET PATH=%PATH%;/usr/lib/openoffice/program/

Dynamische Lösung zur Laufzeit:

keine gefunden

Referenzen

1 Kommentar:

Anonym hat gesagt…

Hallo.
Ich mochte mit Ihrer Website taeglich-java.blogspot.com Links tauschen