Dukeatcoding
Mitglied
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.
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.
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
PHP:
<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.
PHP:
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());
}
}
}
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.
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