# [solved] Eclipse RCP: Zugriff auf Classpath-Inhalt



## tuxedo (18. Jun 2009)

Hallo zusammen,

ich habe eine größere Eclipse RCP Anwendung, welche einen Systemprozess mittels Runtime.exec() starten muss.

Bei diesem Prozess handelt es sich ebenfalls um eine Java-Anwendung. 

Die zu startende Java Anwendung (die als separater Prozess laufen MUSS) benötigt unter anderem die von der Eclipse RCP Anwendung mitgelieferten SWT Bibliothek, sowie Log4j und noch ein paar Plugins (bzw. ein paar Klassen die darin enthalten sind).

Ich weiß, das ist nicht sonderlich "schick", aber besser gings jetzt für's erste nicht. 

An die Information, welche Libs von der RCP Anwendung genutzt werden und wo sie sich befinden, bin ich bisher über die Java System Property "osgi.bundles" gekommen.

Beim starten der Anwendung via Eclipse und auch nach dem Exportieren der Anwendung aus Eclipse heraus hat das prima funktioniert. "osgi.bundles" enthielt immer die passenden Informationen die ich extrahieren und zum angeben des Classpaths der zu startenden Java-Anwendung verwenden konnte.

Das komplette Projekt wird auch noch per Ant und CruiseControl "headless" gebaut. An sich funktioniert das prima. Nur hab ich jetzt entdeckt, dass "osgi.bundels" auf diesem Build-Weg die benötigte Information nicht mehr enthält. Da steht jetzt etwas anderes drin:

Statt dem hier:



> reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/RemotePointerPlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/DependencyPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/DependencyPlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/LoggingPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/OnlineHelp,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/ControlPanelPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/ControlPanelPlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/OperatorUI,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/OperatorUI.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/RemotePointerPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/SquidModePlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/DisplayPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/DisplayPlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/PerspectivePlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/PerspectivePlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/ScalerWidgetPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/ScalerWidgetPlugin.nl,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/SidebarPlugin,reference:file:/Users/achr/Sandboxes/Copy-of-SMD-NCS-Programs-CMS/Subsystems/CMS/Java/SidebarPlugin.nl,reference:file:C:/Lang/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar,reference:file:C:/Lang/eclipse/plugins/javax.servlet_2.4.0.v200806031604.jar,reference:file:C:/Lang/eclipse/plugins/javax.servlet.jsp_2.0.0.v200806031607.jar,reference:file:C:/Lang/eclipse/plugins/javax.xml_1.3.4.v200806030440.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.ant_1.7.0.v200803061910,reference:file:C:/Lang/eclipse/plugins/org.apache.commons.el_1.0.0.v200806031608.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.commons.logging_1.0.4.v20080605-1930.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.jasper_5.5.17.v200806031609.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.log4j_1.2.13.v200806030600.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.lucene_1.9.1.v20080530-1600.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.lucene.analysis_1.9.1.v20080530-1600.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.xerces_2.9.0.v200805270400.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.xml.resolver_1.2.0.v200806030312.jar,reference:file:C:/Lang/eclipse/plugins/org.apache.xml.serializer_2.7.1.v200806030322.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.ant.core_3.2.0.v20080529.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.databinding_1.1.1.M20080827-0800b.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.filesystem_1.2.0.v20080604-1400.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.filesystem.win32.x86_1.1.0.v20080604-1400.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.resources_3.4.1.R34x_v20080902.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.resources.compatibility_3.4.0.v20080604-1400.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.resources.win32.x86_3.4.0.v20071204.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar@start,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.runtime.compatibility_3.2.0.v20071008.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610,reference:file:C:/Lang/eclipse/plugins/org.eclipse.core.variables_3.2.100.v20080529-1300.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.http.jetty_1.1.0.v20080425.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.v20080427-0830.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.jsp.jasper_1.0.100.v20080427-0830.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.jsp.jasper.registry_1.0.0.v20080427-0830.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.help_3.3.101.v20080702_34x.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.help.base_3.3.101.M20080728_34x.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.help.ui_3.3.101.M20080715_34x.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.help.webapp_3.3.101.M20080805_34x.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.jface_3.4.1.M20080827-2000.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.jface.databinding_1.2.1.M20080827-0800a.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.swt_3.4.1.v3449c.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.ui_3.4.1.M20080910-0800.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.ui.forms_3.3.101.v20080708_34x.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.ui.views_3.3.0.I20080509-2000.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.ui.workbench_3.4.1.M20080827-0800a.jar,reference:file:C:/Lang/eclipse/plugins/org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar,reference:file:C:/Lang/eclipse/plugins/org.junit4_4.3.1,reference:file:C:/Lang/eclipse/plugins/org.mortbay.jetty_5.1.14.v200806031611.jar



steht nur noch das hier drin:



> org.eclipse.equinox.common@2:start,org.eclipse.update.configurator@3:start,org.eclipse.core.runtime@start




läuft beim Build-Prozess via Ant irgendwas falsch? Oder komm ich noch irgendwie anders an die Pfadinformationen der verwendeten Plugins/Libaries der Eclipse RCP Anwendung ran??

Gruß
Alex

[update]
Okay, ich hab mich geirrt. Beim exportieren der Anwendung klappts auch nicht. Da enthält osgi.bundles eine genaus kurze, mich mich nicht nutzbare Information...


----------



## tuxedo (18. Jun 2009)

Okay, ich glaub ich hab selbst ne Lösung gefunden:

Ich hab 2 Varianten: 

1) Für die Entwickler unseres Programms: Starten aus der IDE heraus
2) Für Tester die das Projekt testweise exportieren und den Nightly-Build via Ant

Damit ich beide Varianten unterscheiden kann, ziehe ich "osgi.bundles" heraus. Beginnt dies mit "reference", so wird aus der IDE heraus gestartet, und ich kann verfahren wie bisher.

Beginnt dies NICHT mit "reference", so wurde die Anwendung exportiert oder von ANT gebaut. Dann gehe ich wie folgt vor:

Ich nehme "eclipse.home.location", welches auf das Basisverzeichnis der RCP Anwendung zeigt, hänge "plugins" als Unterordner an, und enumeriere über den Verzeichnisinhalt. Ab hier kann ich weitermachen wie in der ersten Variante: Inhalt parsen und Classpath für meine zu startende Anwendung aufbauen...

Abgesehen von einer saubereren Implementierung der ganzen Sache (muss das bis heute Abend erstmal vorläufig gefixt haben...): Gegenvorschläge?

- Alex


----------



## Wildcard (18. Jun 2009)

Nimm Buckminster zum Bauen. Das Plugin resolved dann die benötigten Bundles aus der Platform und stellt sie dir in ant als property zur Verfügung. Das auflösen und kopieren aller Abhängigkeiten lässt sich dann auf ein 5 Zeilen Ant Script reduzieren (das man nichtmal mehr selbst aufrufen muss). 
Ich kann dir dazu genauere Informationen geben, da ich genau das gerade auch umgesetzt habe, müsste aber genaueres über dein Setup wissen


----------



## tuxedo (19. Jun 2009)

Dass Ant nicht DIE Lösung ist weiß ich. Nur besteht das Projekt aus ca. 60 Unterprojekten. Zur Zeit arbeiten wir dran Maven einzusetzen um die unzahligen Abhängigkeiten sauber aufzulösen. 

Aber mal davon abgesehen: Mein obiger Ansatz hat soweit funktioniert. War ne Sache von nur 10min.

Gruß und danke für den Tipp,
Alex


----------



## Wildcard (19. Jun 2009)

Für Eclipse Projekte/OSGi Bundles würde ich dir wirklich empfehlen dir Buckminster anzuschauen, damit ersparst du dir sehr viel Ärger und Arbeit. Auch Eclipse wird damit gebaut und ausserdem ist es auch zu Maven, Ant und vielen anderen Dingen kompatibel.


----------

