Как выполнить Сценарий Groovy из моего приложения Grails?

Ну, это кажется простой задачей, но мне не удалось заставить его работать.

У меня есть отличный сценарий, который хорошо работает под Windows Vista при вызове от подсказки:

> cd MY_GAILS_PROJECT_DIR
> groovy cp src/groovy scripts/myscript.groovy

Теперь, я хочу выполнить этот сценарий (и передающий ему некоторые входные параметры) через мой мой Класс Услуги по сопровождению (названный от контроллера) как ниже,

class MaintenanceService {
  def executeMyScript() {
    "groovy cp src/groovy scripts/myscript.groovy".execute()
  }
}

Это не работает вообще! Мне даже не удается иметь выполнение () метод, распознающий любую команду (как "cd .".execute()) выдача исключения:

Error 500: java.io.IOException: Cannot run program "cd": CreateProcess error=2, The system cannot find the file specified

1-, Как я могу выполнить отличный сценарий из своего приложения чаш Грааля?

2-, Каковы лучшие практики здесь? Например, я должен использовать QuartzPlugin и затем triggerNow метод для выполнения сценария? я должен использовать Задачу Gant? Если да, как сделать это?

Спасибо.

6
задан fabien7474 18 December 2009 в 10:28
поделиться

3 ответа

Если вы не возражаете против того, чтобы ваш скрипт работал асинхронно (в отдельном процессе от метода службы), следующее должно работать, если groovy находится в вашей переменной PATH:

def cmd = ['groovy.bat', 'cp', 'src/groovy scripts/myscript.groovy']
cmd.execute()

Если вы хотите просмотреть вывод процесса в консоли приложения, попробуйте вместо этого что-то вроде этого

// Helper class for redirecting output of process
class StreamPrinter extends Thread {
    InputStream inputStream

    StreamPrinter(InputStream is) {
        this.inputStream = is
    }

    public void run() {
        new BufferedReader(new InputStreamReader(inputStream)).withReader {reader ->
            String line
            while ((line = reader.readLine()) != null) {
                println(line)
            }
        }
    }
}

// Execute the script
def cmd = ['groovy', 'cp', 'src/groovy scripts/myscript.groovy']
Process executingProcess = cmd.execute()

// Read process output and print on console
def errorStreamPrinter = new StreamPrinter(executingProcess.err)
def outputStreamPrinter = new StreamPrinter(executingProcess.in)
[errorStreamPrinter, outputStreamPrinter]*.start()

Обновление: В ответ на ваш комментарий ниже попробуйте следующее (предполагается, что вы работаете в Windows):

1: Создайте файл C: \ tmp \ foo.groovy. Содержимое этого файла должно быть простым:

println 'it works!'

2: В консоли Groovy запустите следующее:

cmd = ['groovy.bat', 'C:\\tmp\\foo.groovy']
cmd.execute().text

3: Вы должны увидеть результат сценария (текст «работает!»), Показанный в консоли Groovy.

Если вы не можете заставить этот простой пример работать, что-то не так с вашей средой, например 'groovy.bat' отсутствует в вашем PATH. Если вам удастся заставить этот пример работать, то вы сможете продвигаться вперед для достижения своей цели.

5
ответ дан 9 December 2019 в 22:35
поделиться

Самый простой способ:

Создайте класс Groovy и поместите его в папку / src / groovy вашего проекта Grails. Импортируйте этот класс в свой класс домена и используйте определенные вами функции.

Мои 2 цента ...

2
ответ дан 9 December 2019 в 22:35
поделиться
0
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: