Нужно руководство для автоматизации нескольких процессов .bat файлов - PullRequest
0 голосов
/ 09 февраля 2011

Я хочу создать утилиту на Java для автоматизации нашего процесса сборки. Текущий процесс включает

  • Открытие 2 консолей для серверов. (Я хочу открыть эти консоли из Java-программы)
  • Запуск нескольких файлов bat в консолях и на основе одного вывода пакетного файла, запуск других команд.

Мне нужен старт, какие библиотеки мне использовать. Могу ли я открыть 2 консоли из Java (независимо). Например, если моя программа закрывается, эти консоли продолжают работать. (консоли - это bea server, startWebLogic.cmd).

Ответы [ 3 ]

1 голос
/ 09 февраля 2011

Alee, да, вы можете сделать это с Runtime.getRuntime (). Exec ("file.bat");и затем у вас есть 2 варианта, вы можете захватить выходные данные выполнения

, например:

public static void main(String[] args) {
    System.out.println("hello");
    try {
        Process p = Runtime.getRuntime().exec("./prog.sh");
        InputStream in = p.getInputStream();

        System.out.println("OUTPUT");
        StringBuilder sb = new StringBuilder();
        int c;
        while( (c = in.read() ) > 0 ) {
            sb.append((char) c);
        }

        //here the script finished
        String output = sb.toString();
        if( output.contains("Exception")) { 
            System.out.println("script failed");
        }

        if( p.exitValue() == 0) {
            System.out.println("The script run without errors");
        } else {
            System.out.println("The script failed");
        }
    } catch (IOException e) {
        e.printStackTrace(); 
    }
}

это захватывает оба сценария, где вам нужно захватить выходные данные, а затем решить, является лиСценарий успешно запущен, или если вы можете использовать состояние выхода из сценария.

Код exitValue равен 0 для успешного завершения и любое другое число для сбоя.

1 голос
/ 09 февраля 2011

Конечно, вы можете открыть столько консолей, сколько захотите.Если вы хотите сделать это одновременно, создайте отдельные потоки, а затем создайте процесс, используя Runtime.exec () или ProcessBuilder.

Но почему вы хотите это сделать?Есть старый добрый муравей, который является инструментом сборки, предназначенным для таких задач.Он поддерживает все и расширяется с помощью пользовательских задач.

Более того, если вы вдруг вспомните, что сейчас 2011 год, используйте более новые инструменты, такие как Apache Buildr.

0 голосов
/ 09 февраля 2011

Java Runtime класс имеет методы для запуска Процессы , которые имеют программные интерфейсы для своих потоков ввода / вывода и другого управления. Однако я не уверен, как Windows обрабатывает процессы, чьи родители умерли.

Вам также следует рассмотреть возможность использования Windows Script Host через VB или JScript, поскольку у вас, вероятно, будет более точное управление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...