# Eigenständige Applikation als Jar in Plugin einbinden



## Votek (29. Aug 2011)

Hi Leute,

also mein Problem ist folgendes:

Ich habe eine Applikation die selbstständig läuft (is ne Simulation und nutzt unter anderem auch slick und swt), d.h. sie wird über eine main() Funktion gestartet und läuft dann so zusagen in einem eigenen Lifecircle. 

Soweit so gut. Nun soll aber diese Applikation (später dann mehrere) über eine RCP Applikation aufrufbar gemacht werden. Die RCP Applikation soll am Anfang nur eine Konfigurationsaufgaben erfüllen (das ist aber auch kein Problem). So nun habe ich mich etwas mit RCP beschäftigt und weiss auch das man ein Bundle erstellen kann, indem man (ich nutze Eclipse) ein neues Project erstellt "Plugin from existing jar ..." und dann alle jars, d.h. insbesondere die welche von meiner Application als libraries verwendet einfügt.

Ich habe dann ein Plugin erstellt, dass eine RCP Application erstellt und habe über Dependencies das oben genannte Bundle eingefügt. 

In der Klasse Application habe ich dann folgendes eingefügt:

```
public Object start(IApplicationContext context) throws Exception {
		Display display = PlatformUI.createDisplay();
		[B]ApplicationControl app = new ApplicationControl();
                app.start();[/B]
		try {
			int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
			if (returnCode == PlatformUI.RETURN_RESTART)
				return IApplication.EXIT_RESTART;
			else
				return IApplication.EXIT_OK;
		} finally {
			display.dispose();
		}
		
	}
```

Nun ist das Problem, dass ich folgende Fehlermeldung bekomme:

```
!ENTRY org.eclipse.osgi 4 0 2011-08-29 13:28:28.292
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "test2.application" could not be found in the registry. The applications available are: org.eclipse.ant.core.antRunner, org.eclipse.contribution.weaving.jdt.weavingtest, org.eclipse.equinox.app.error, org.eclipse.jdt.core.JavaCodeFormatter.
	at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:248)
	at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
```

Zum einen frage ich mich natürlich was diese Meldung zu bedeuten hat. Denn die Klasse Applikation gibt es in test2 (die Bezeichnung is nur temporär, da ich gerade erst teste) und sie startet auch einwandfrei, wenn das bundle nicht integriert ist.

Die zweite Frage ist, ob man eine andere Application so überhaupt starten kann, sollte oder ob es andere Wege gibt.

Vielen Dank schonmal und viele Grüße


----------



## Votek (29. Aug 2011)

Hi Leute,

also ich habe den Fehler gefunden. Ich hatte in dem Bundle aus irgendwelchen Gründen Dependencies drinnen die da nicht reingehört haben. 

Allerdings habe ich jetzt ein anderes Problem. Die Applikation die in einer eigenen jar steckt, greift auf zwei Verzeichnisse zu, die normaler weise im selben Verzeichniss liegen wie das jar file. Nun würde ich gerne wissen wie ich die in das Plugin einbette. Wenn ich sie direkt reinkopiere, dann erscheinen sei bei den referenzierten Bibliotheken. Das scheint aber nicht hinzuhauen, denn dann findet das file die Sachen nicht. Ein Beispiel ein Verzeichniss ist folgendermaßen angegeben "conf/experiment/experiment_config.xml".

Wie muss ich das konfiguerieren, damit darauf zugegriffen werden kann, oder muss ich vielleicht die Verzeichnisse in garnicht in das Plugin sondern woanders hin packen?

Grüße


----------



## Wildcard (29. Aug 2011)

Wie macht diese Applikation das? Per relativem Pfad und der File API? Dann kannst du es vergessen, geht nicht. Die Folder müssten dann relativ zum Ausführungsverzeichnis des RCP liegen.


----------

