Задача ant java: перенаправление вывода с помощью spawn = true - PullRequest
4 голосов
/ 31 мая 2011

Привет,

довольно ясный вопрос здесь.

Мне нужно запустить java-задание с <java>, которое должно выполняться параллельно с ant, и ничего, если задание переживает процесс ant, следовательно, spawn="true".

Я должен увидеть выходные данные задания в указанном файле. Это вполне достижимо через output="job.out" для spawn="false", но мне немного не повезло, если spawn"=true".

Итак, есть какой-нибудь скромный грязный хак, или мне действительно нужно обернуть java вызов exec, как показано ниже?

CMD /C my-java-command-and-hardcoded-classpath-goes-here > job.out

Спасибо, Anton

1 Ответ

2 голосов
/ 01 июня 2011
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;

public class StreamRedirector {
    public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException,
            NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        System.out.println(Arrays.toString(args));
        //  parse the arguments
        if (args.length != 2) {
            throw new IllegalArgumentException(
                    "Usage:" +
                        "\targ0 = wrapped main FQN;\n" +
                        "\targ1 = dest output file name;\n" +
                        "\tother args are passed to wrapped main;"
            );
        }
        String mainClass = args[0];
        String destinationFile = args[1];

        //  redirect the streams
        PrintStream outErr = new PrintStream(new FileOutputStream(destinationFile));
        System.setErr(outErr);
        System.setOut(outErr);

        //  delegate to the other main
        String[] wrappedArgs = new String[args.length - 2];
        System.arraycopy(args, 2, wrappedArgs, 0, wrappedArgs.length);
        Class.forName(mainClass).getMethod("main", String[].class).invoke(null, (Object) wrappedArgs);
    }
}
...