2014-02-17 3 views
0

Я пытаюсь запустить команду grails, как «grails help» из приложения Grails, но все попытки, которые я сделал, заканчиваются «Ошибка: не удалось найти или загрузить основной класс org.codehaus. groovy.grails.cli.support.GrailsStarter».Запуск команды grails из приложения grails

В принципе, я попытался

def p1 = "grails help".execute() 
p1.waitFor() 

println "return code: ${ p1.exitValue()}" 
println "stderr: ${p1.err.text}" 
println "stdout: ${p1.in.text}" 

также:

Runtime runtime = Runtime.getRuntime() 
Process process = runtime.exec("grails help") 
process.waitFor() 

println "return code: ${ process.exitValue()}" 
println "stderr: ${process.err.text}" 
println "stdout: ${process.in.text}" 

И, наконец:

def sout = new StringBuffer() 
def serr = new StringBuffer() 
final processBuilder = new ProcessBuilder() 
processBuilder.directory(new File("/myFolder")) 
processBuilder.command(["grails","help"]) 
println processBuilder.directory() 
Process proc = processBuilder.start() 
proc.consumeProcessOutput(sout, serr) 

def status = proc.waitFor() 
println 'sout: ' + sout 
println 'serr: ' + serr 

Конечно, "Grails помощь" команда не один я хочу для выполнения, но исправления этого, он исправит ту, которую мне нужно запустить.

Любые другие идеи?

ответ

1

Если создать новое приложение с Граалей 2.3.5 (grails create-app script-test), а затем объявить контроллер (grails create-controller test.Run) и изменить его так, как это выглядит:

package test 

class RunController { 
    def index() { 
     def t = [ 'grails', 'help' ].execute().text 
     render "<pre>$t</pre>" 
    } 
} 

Затем запустите его с grails run-app и перейти к localhost:8080/script-test/run, я получаю экран справки grails, отображаемый как текст на веб-странице.

Проблема, с которой вы столкнетесь, заключается в том, что она не будет работать в процессе производства, поскольку вы, вероятно, собираетесь развернуть файл war, поэтому Grails не будет знать, где вы находитесь, или что вы делаете (если действительно Grails установлен на сервере)

Я думаю, что вы должны заново продумать свою стратегию, то, что вы пытаетесь сделать :-(

+0

Но что об использовании окр уаг GRAILS_HOME? Я обнаружил, что ProcessBuilder .command ([env ['GRAILS_HOME'] + "/ bin/grails", "help"]) сделает трюк. Разве вы не думаете, что он будет работать над производством? Я еще не тестировался в prod. –

+1

Я использую 'gvm' для установки grails, и поэтому на моем пути есть« grails » (и 'GRAILS_HOME' установлен в'/Users/me/.gvm/grails/current'), поэтому он работает без каких-либо изменений. Это зависит от того, как вы развертываете производство. Мы разворачиваем военные файлы на сервер, не зная о бинарных файлах Grails, поэтому для нас это не сработает –

+0

Спасибо @tim_yates за вашу помощь! –

Смежные вопросы