Java avec OpenOffice sous Linux


Il y a quelques temps, j'ai développé un petit programme java qui génère une table des matières dans une présentation OOo Impress. Tout fonctionnait bien sous Windows, mais sur mon poste Ubuntu, j'avais systématiquement le message d'exception suivant :

com.sun.star.comp.helper.BootstrapException: no office executable found!
       at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:253)
       at fr.sewatech.sewatoool.impress.helper.ImpressHelper.<init>(ImpressHelper.java:55)
       ... 1 more

Pourtant OpenOffice était bien installé sur la machine, et les jars du classpath étaient bien ceux du répertoire d'installation d'OOo. Et le problème se posait que je lance mon application depuis Eclipse ou en ligne de commande.

Ligne de commande

Pour information, voici le script que je lançais :

OFFICE_HOME="/usr/lib/openoffice/program/" 
CLASSPATH="sewatoool.jar:$OFFICE_HOME/classes/juh.jar:$OFFICE_HOME/classes/jurt.jar:$OFFICE_HOME/classes/ridl.jar:$OFFICE_HOME/classes/unoil.jar" 
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc

J'ai beaucoup cherché sur la toile, sans trouver de solution adaptée à mon cas. Cependant, en testant divers solutions, j'ai constaté qu'il fallait que je rajoute le répertoire program d'OOo dans le classpath. En fait, tout sous-répertoire de program ou tout fichier inclus dans un sous-repertoire, qui ne soit pas un jar valide, peut être ajouté.

Le script suivant fonctionne :

OFFICE_HOME="/usr/lib/openoffice/program/" 
CLASSPATH="sewatoool.jar:$OFFICE_HOME/classes/juh.jar:$OFFICE_HOME/classes/jurt.jar:$OFFICE_HOME/classes/ridl.jar:$OFFICE_HOME/classes/unoil.jar:$OFFICE_HOME" 
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc

Restait encore à résoudre le problème dans Eclipse.

Dans Eclipse

Pour mes développements, jai créé une "user library" qui rassemble les 4 jars nécessaires. Mais comme ces librairies ne peuvent pas contenir d'"external folder", j'ai du contourner le problème.

Ma première solution (ou plutôt bidouille !) consistait à créer un fichier jar bidon dans program/classes et à l'ajouter dans la "user library".

La deuxième solution, probablement meilleure, consiste à ajouter le répertoire program en tant qu'"external folder" dans la configuration de lancement de l'application. Il faut utiliser le bouton "Advanced" pour cela.

Run-sewatoool.png

Cette solution a été testée avec Ubuntu 7.10, OpenOffice 2.3 et Eclipse 3.3.

La documentation de développement OpenOffice peut être trouvé sur leur wiki.

Avec OpenOffice 3

Dans la version 3 de OpenOffice, la structure de fichiers a un peu changé.

OFFICE_HOME="/usr/lib/openoffice" 
CLASSPATH="sewatoool.jar:$OFFICE_HOME/URE/java/juh.jar:$OFFICE_HOME/URE/java/jurt.jar:$OFFICE_HOME/URE/java/ridl.jar:$OFFICE_HOME/Basis/program/classes/unoil.jar:$OFFICE_HOME/Basis/program" 
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc