Runtime.getRuntime().exec() und Eclipse

Sonecc

Gesperrter Benutzer
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:

Java:
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

Java:
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
 

Sonecc

Gesperrter Benutzer
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

Top Contributor
[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

Gesperrter Benutzer
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

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

Wer Eclipse Programmatisch starten will, muss folgendes verwenden:

Java:
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

Gesperrter Benutzer
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
 

Sonecc

Gesperrter Benutzer
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

Top Contributor
Folgendes funktioniert bei mir perfekt, also schau mal genauer was bei dir anders ist:
Java:
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:
Code:
-Declipse.home=${eclipse_home}
 

Sonecc

Gesperrter Benutzer
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

Top Contributor
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

Gesperrter Benutzer
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

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

Sonecc

Gesperrter Benutzer
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.
 

Neue Themen


Oben