2014-02-17 87 views
0

我試圖從Grails應用程序運行grails命令,如「grails help」,但我所做的所有嘗試都以「錯誤:無法找到或加載主類org.codehaus」爲由。 groovy.grails.cli.support.GrailsS​​tarter」。從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

如果我創建使用Grails 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」])會製造詭計。你不認爲它會用於生產嗎?我還沒有測試過產品。 –

+1

我使用'gvm'來安裝grails,所以我的路徑上有'grails' (並且'GRAILS_HOME'設置爲'/ Users/me/.gvm/grails/current'),所以它沒有任何改變。這取決於你如何部署到生產。我們將戰爭文件部署到不知道grails二進制文件的服務器上,所以對我們來說這不起作用 –

+0

感謝@tim_yates的幫助! –