# Runtime.getRuntime().exec() und Eclipse



## Sonecc (3. Mrz 2010)

Habe ein Problem mit Runtime.getRuntime().exec() und Eclipse.
Versuche Eclipse darüber zu starten, aber es passiert nicht viel.
Die console wird geöffnet (benutze -console und -consolelog) und der Splashscreen erscheint. Das wars dann aber auch schon.
Danach passiert nichts mehr.
Der Commandstring ist richtig, schließlich läuft er in meiner Verknüpfung problemlos (und ebenso in der cmd)

Weiß einer was da falsch läuft?

Hier mal der Befehl:


```
Runtime.getRuntime().exec("D:/Ordner/eclipse3.5/eclipse/eclipse.exe -vm D:/Ordner/SUN/jdk1.5.0_14/bin/java.exe -data D:/einige/ordner/mit/unter/ordnern -console -consolelog", null, new File("D:/Ordner/eclipse3.5/eclipse/"));
```

Anmerkung:
Sowohl der Befehl, als auch 


```
Runtime.getRuntime().exec("D:/Ordner/eclipse3.5/eclipse/eclipse.exe -vm D:/Ordner/SUN/jdk1.5.0_14/bin/java.exe -data D:/einige/ordner/mit/unter/ordnern -console -consolelog");
```

gehen nicht


----------



## Wildcard (3. Mrz 2010)

Schau mal in  
	
	
	
	





```
D:/einige/ordner/mit/unter/ordnern/.metadata/.log
```
 nach


----------



## Sonecc (4. Mrz 2010)

In der vorhanden steht nichts dazu drinne.
Die Meldungen die dort stehen sind alle während dem produktiven Einsatz aufgetreten.
Hab die Datei deswegen mal umbenannt und es erneut versucht, es wird aber keine neue Log datei erstellt


----------



## musiKk (4. Mrz 2010)

[c]exec()[/c] liefert ein Process-Objekt. Dort mal [c]getErrorStream()[/c] und [c]getInputStream()[/c] und schauen, was da so schief läuft.

Ich könnte mir ja vorstellen, dass das working directory nicht stimmt (in der Verknüpfung wird dieses iirc standardmäßig auf den Pfad der exe gesetzt). Das lässt sich übrigens in einer der [c]exec()[/c]-Versionen angeben. Wobei... wenns von der cmd aus läuft...


----------



## Sonecc (4. Mrz 2010)

in der ersten Version wird das Working Directory gesetzt
Desweiteren lasse ich ja extra die Osgi Console über -console und -consolelog öffnen und loggen.
Aber auch die Ausgabe des ErrorStreams oder des InputStreams ergaben nichts. Sind beide scheinbar leer.


----------



## Sonecc (5. Mrz 2010)

Hab ne Lösung gefunden, die zwar so ihre Nachteile mit sich bringt, aber naja...

Wer Eclipse Programmatisch starten will, muss folgendes verwenden:


```
Runtime.getRuntime().exec("java -jar PFADZUECLIPSE/plugins/org.eclipse.equinox.launcher_1.0.200.v20090520.jar");
```

Wobei PFADZUECLIPSE mit dem entsprechenden Pfad auszutauschen ist.

Zu beachten ist auch, dass der Schalter -console dann nicht mehr wirkt.
Startet man Eclipse über die CMD auf diese weise, wird der Log einfach in die cmd geschrieben


----------



## Sonecc (5. Mrz 2010)

Es gibt natürlich auch noch die Möglichkeit das ganze über Bat dateien zu lösen (die dann das gleicher Verhalten erzeugen, wie bei einer Verknüpfung)
Rein programmatisch, kann man den nativen Launcher von Eclipse jedoch scheinbar nicht ansprechen


----------



## Wildcard (5. Mrz 2010)

Sonecc hat gesagt.:


> Rein programmatisch, kann man den nativen Launcher von Eclipse jedoch scheinbar nicht ansprechen


Das kann nicht sein. Vermutlich war es ein so banales Problem wie zB das du den output und Error Stream nicht gelesen hast und der Prozess daraufhin nach kurzer Zeit blockiert


----------



## Sonecc (8. Mrz 2010)

ich hab gesucht und nix dazu gefunden.
Das einzige was ich gefunden habe, war eben oben beschriebener Weg.
Output und Error Stream lesen hat bei mir auch nichts gebracht.

Wenn du also eine Lösung hast, wie man den nativen Launcher ansprechen kann, würde ich mich freuen. Ich habe dazu keine Lösung gefunden und gebe mich daher mit meiner Lösung zufrieden


----------



## Wildcard (8. Mrz 2010)

Folgendes funktioniert bei mir perfekt, also schau mal genauer was bei dir anders ist:

```
public class StartEclipse {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path = System.getProperty("eclipse.home");
		ProcessBuilder builder = new ProcessBuilder(path+"/eclipse.exe", "-data", "C:\\Test");
		try {
			Process p = builder.start();
			p.waitFor();
			System.out.println("done");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
```
In der Launch Configuration bei VM Arguments folgenden Eintrag hinzufügen: 
	
	
	
	





```
-Declipse.home=${eclipse_home}
```


----------



## Sonecc (9. Mrz 2010)

kann ich erst morgen testen

danke jedenfalls schonmal für die geduldige hilfe^^


----------



## Sonecc (10. Mrz 2010)

Das gleiche wie vorher.
Nach 3 Minuten warten, hab ich den Startvorgang abgebrochen.
Es passiert einfach nichts, keine log meldungen, keine Progress Bar im Splash bild, nach 3 minuten keine regung.


----------



## Wildcard (10. Mrz 2010)

Versuch auf diese Art ein frisches Eclipse (ein Standardpaket von eclipse.org) in einem neuen Workspace zu starten um Fehlerquellen zu eliminieren. Verwende am besten exakt den gleichen Code wie ich.


----------



## Sonecc (10. Mrz 2010)

ich korrigiere meine aussage mal:

Ich habe die (für mich essentiellen) Flags -console und -consolelog hinzugefügt.
Damit startet es nicht. Die Console wird geöffnet, aber es passiert sonst nichts
Lasse ich sie weg startet es (bei einer frischen Eclipse Version mit leerem Workspace).
Auf die Console kann ich jedoch nicht verzichten.


----------



## Wildcard (10. Mrz 2010)

Du kannst bei -console eine Portnummer mitgeben unter der du dann eine OSGi Konsole andocken kannst. Anders wird das wohl nicht funktionieren.


----------



## Sonecc (11. Mrz 2010)

Die Portangabe war der blockende Punkt.
Nun startet das Eclipse, logt aber nicht in die Console...
Es wird also die Console geöffnet, sie bleibt jedoch leider leer.


----------

