1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1544
1544
EMPFEHLEN
-
10.08.07 12:31 #1
- Registriert seit
- Jan 2004
- Beiträge
- 47
Ich bin gerade dabei ein Makesystem zu schreiben. Anhand von einer XML Datei kann man angeben was für Dinge kompeliert werden sollen, mit welchen Compilern.
PHP-Code:<Makesystem>
<tool>
<name>java</name>
<cmd>D:\Programme\Java\jdk1.6.0_01\bin\javac</cmd>
</tool>
<output>
<name>outputa</name>
<usetool>java</usetool>
<argument>-cp D:\</argument>
<argument>D:\Hello.java</argument>
</output>
</Makesystem>
Das Parsen der XML Datei ist kein Problem und auch das vernünftige Zwischenspeichern in Objekten und wieder auslesen nicht. Meine Probleme fangen im Prinzip beim Ausführen der Befehle an. Ich hab auf einem Beispiel hier aussem Forum von Tom folgendes zu Wege gebracht.
Ich hatte noch einiger andere Versuche mit verschiedenen Parametern an den ProcessBuilder, die aktuelle Version hört einfach nicht auf zu laufen, weil javac wohlmöglich seine Hilfe Seite ausgibt, diese wird aber auch nicht auf der Konsole ausgegeben.PHP-Code:import java.util.*;
import java.io.*;
public class Compiler {
private ToolHandler tools;
private OutputHandler outputs;
private ArrayList<Output> outputsArray;
// Fuer run
private String name, toolname;
private ArrayList arguments;
private Output output;
private Tool tool;
private String tname, cmd, argumentes;
public Compiler(ToolHandler tools, OutputHandler outputs){
this.tools = tools;
this.outputs = outputs;
outputsArray = outputs.getOutputs();
}
public void run(){
//Nacheinander die Outputs abarbeiten
Iterator iterator = outputsArray.iterator();
while(iterator.hasNext()){
// Daten auslesen
output = (Output)iterator.next();
name = output.name;
toolname = output.toolname;
arguments = output.arguments;
//Toolname zu Objekt
tool = tools.getTool(toolname);
tname = tool.getName();
cmd = tool.getCommand();
// Argumente konvertieren
argumentes = "";
Iterator iteratorB = arguments.iterator();
while(iteratorB.hasNext()){
argumentes += (String)iteratorB.next() + " ";
}
// Aufruf vornehmen
System.out.println("=========== Aufuehrung ===============");
System.out.println("Output: " + name + " " + toolname + " Argumente " + argumentes + " " + "Tool: " + cmd);
System.out.println("=========== Rueckgabe ===============");
this.process(cmd,argumentes);
System.out.println("=========== Aufuehrung ENDE ===============");
}
}
public void process(String cmd, String cmdArguments){
try{
File scriptFile = new File("D:/Hello.java");
ProcessBuilder processBuilder = new ProcessBuilder("cmd","/c",cmd);
processBuilder.directory(scriptFile.getParentFile());
Process process = processBuilder.start();
Scanner scanner = new Scanner(process.getInputStream());
while(scanner.hasNextLine()){
System.out.println(scanner.nextLine());
}
scanner.close();
System.out.println(process.waitFor());
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Bevor ich es vergesse.... natürlich kann man java Files auch anders in Java kompelieren, aber wie eingangs schon erwähnt muss es nicht zwingend eine Java File sein die kompeliert werden soll.
Für jede Idee bin ich dankbar.
MfG
Duke
-
Ich hoffe das XML mit dem du testest hat nicht so kaputte Pfade...
Auf jeden Fall ignorierst du die Argument die du mit übergibst. Dann ist es auch kein Wunder dass nichts ausgeführt wird. Weiterhin macht es keinen Sinn die Argumente zu einem String zu konkatenieren, damit kommt der ProcessBuilder nicht klar. Und du kannst den Compiler auch direkt ausführen ohne den Umweg über "cmd".
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
private static void execute(Output out, Tool tool) throws IOException, InterruptedException { String[] array = out.getArguments( ).toArray(new String[0]); String[] commandArray = new String[array.length + 1]; commandArray[0] = new File(tool.getCommand( )).getAbsolutePath( ); System.arraycopy(array, 0, commandArray, 1, array.length); ProcessBuilder builder = new ProcessBuilder(commandArray); File outDir = new File("D:/test"); outDir.mkdir( ); builder.directory(outDir); Process p = builder.start( ); System.out.println("Errors:"); Scanner s = new Scanner(p.getErrorStream( )).useDelimiter("\\Z"); if (s.hasNext( )) { System.out.println(s.next( )); } s.close( ); System.out.println("Output:"); Scanner s2 = new Scanner(p.getInputStream( )).useDelimiter("\\Z"); if (s2.hasNext( )) { System.out.println(s2.next( )); } s2.close( ); System.out.println(p.waitFor( )); }
-
24.08.07 13:08 #3
- Registriert seit
- Jan 2004
- Beiträge
- 47
Danke für die Antwort hatte leider keine Zet mich eher wieder drum zu kümmern.
Ich hab gerade noch nen bissel Probelme mit dem toArray aus Zeile 4, werd erstma selber versuchen da noch etwas rumzufrickeln
Ähnliche Themen
-
ProcessBuilder
Von IroNHeinZ im Forum Java GrundlagenAntworten: 7Letzter Beitrag: 20.12.09, 14:59 -
Probleme mit Processbuilder
Von Daelrik im Forum JavaAntworten: 4Letzter Beitrag: 30.09.06, 15:54 -
2 Probleme beim DataGrid. beim Löschen und Hinzufügen einer Zeile
Von WaZZkeSS im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 18.06.06, 00:26 -
Probleme beim Empfang von MMS beim Nokia 3510i
Von Claas M im Forum ElektrotechnikAntworten: 1Letzter Beitrag: 25.08.04, 10:38 -
Probleme beim mit datentypen beim erhöhen der Spalten nummer
Von josefhader im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 18.08.04, 14:53





Zitieren

Login





