![](/img/trans.png)
[英]How to Run a Python Program that Takes Command-Line arguments from within a Java Program
[英]How can I run a Groovy class from the command-line within a Grails environment?
我正在使用Grails 2.1.0,我有一個Groovy類,我寫的不依賴於服務,控制器或任何其他Grails的善良。 它使用一些.jar庫和Grails類路徑中已有的其他類。
我想要:
理想情況下,我希望能夠做到這樣的事情:
java -classpath (I_HAVE_NO_IDEA_HOW_TO_DETERMINE_THIS) com.something.MyClass param1 param2 param3
我已經研究過的事情:
第一個(使用Gant腳本)對我來說似乎非常錯誤。 使用Gant腳本作為某種中間包裝似乎需要引導整個Grails環境,而且我必須弄清楚如何獲得對我想要調用的實際類的引用,這似乎很難(但我不是一個Gant專家,所以賜教)。 =)
第二個(使用運行腳本)類型的工作......我之前使用過這種方法調用服務方法,但它有兩個問題:首先,它引導整個Grails環境; 第二,似乎沒有任何方法可以輕松傳遞命令行參數。
真的,我只想要類路徑中的東西(以及我的命令行參數),並且能夠以最小的挫敗感調用我的類的main()方法。 話雖這么說,如果你能提出一個解決問題的任何形式的工作實例(即使它涉及一些中間Gant或其他類),我會很樂意使用這種方法。
謝謝。
更新:適用於Gant任務的解決方案,如果有人有任何更好的想法仍然可以使用...
在scripts / FooBar.groovy中
includeTargets << grailsScript("_GrailsInit")
target(main: "Runs a generic script and passes parameters") {
def myclass = classLoader.loadClass('com.whatever.scripting.GenericRunScript')
myclass.execute(args);
}
setDefaultTarget(main)
在src / groovy / com / whatever / scripting / GenericRunScript.groovy中
package com.whatever.scripting
class GenericRunScript {
public static execute(def args) {
println "args=" + args.inspect()
}
}
然后從命令行,在Grails項目的根目錄中的while:
$ grails compile
| Environment set to development.....
| Compiling 2 source files.
$ grails foo-bar test one two
| Environment set to development....
args='test\none\ntwo'
注1:當我第一次這樣做時,我一直忘記編譯語句,所以我添加了。
注2:是的,args由回車分開; 將這作為練習留給讀者。
如http://grails.org/doc/latest/guide/commandLine.html中所述 ,您可以包含目標_GrailsClasspath
和_GrailsArgParsing
,以及您需要的任何其他內容。 例如,如果要在不創建第二個腳本的情況下解析命令行參數:
$ grails create-script ArgsScript
| Created file scripts/ArgsScript.groovy
現在編輯腳本腳本/ ArgsScript.groovy ,如下所示:
includeTargets << grailsScript("_GrailsArgParsing") // grailsScript("_GrailsInit")
target(main: "The description of the script goes here!") {
println argsMap
for (p in argsMap['params'])
println p
}
setDefaultTarget(main)
看結果:
$ grails args-script one two three=four
| Environment set to development....
[params:[one, two, three=four]]
one
two
three=four
更新:嗯,這並不像我想象的那么容易。 基本上,您可以將腳本作為Gant任務運行,例如通過執行grails myscript
,或者作為腳本grails run-script src/groovy/MyScript.groovy
,例如通過執行grails run-script src/groovy/MyScript.groovy
。 在第一種情況下,您可以訪問參數,正如我已經解釋的那樣,但您仍然會遺漏一些Grails環境,這可能是一個錯誤。 例如,您無法真正從Gant任務訪問src/groovy/
定義的腳本或類。 另一方面,如前所述,如果使用run-script
,則無法獲取參數。
但是, 您可以使用System.getProperty以-Dproperty=value
語法傳遞命令行參數。 另請參閱Java系統屬性和環境變量
上述方式可行,但所有grails工具都將消失,包括域和依賴項。
如果您需要在grails項目中定義的所有內容,則run-script命令將執行此操作
grails run-script [你的groovy文件的路徑]
http://grails.org/doc/latest/ref/Command%20Line/run-script.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.