gpt4 book ai didi

java - 如何在 Grails 环境中从命令行运行 Groovy 类?

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:33 24 4
gpt4 key购买 nike

我正在使用 Grails 2.1.0,并且我有一个我编写的 Groovy 类,它不依赖于服务、 Controller 或任何其他 Grails 优点。它使用一些 .jar 库和其他已经在 Grails 类路径中的类。

我想:

  • 运行 Groovy 类(或 Java 类,它应该无关紧要)使用 Grails 已经在其类路径中的其他库/类(不是服务,不是 Controller ,都不是)。
  • 能够访问命令行参数[这是必需的]
  • 不需要引导整个 Grails 环境(显然我需要类路径,除此之外别无其他)

理想情况下,我希望能够做这样的事情:

java -classpath (I_HAVE_NO_IDEA_HOW_TO_DETERMINE_THIS) com.something.MyClass 参数 1 参数 2 参数 3

我已经调查过的事情:

  • 使用生成 Gant 脚本的“grails create-script”。
  • 使用“grails 运行脚本”

第一个(使用 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 项目的根目录中:

$ 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之间用回车分隔;修复留给读者的练习。

最佳答案

上述方法可行,但所有 grails 工具都将消失,包括域和依赖项。

如果您需要在 grails 项目中定义的所有内容,run-script 命令就可以解决问题

grails run-script [你的 groovy 文件的路径]

http://grails.org/doc/latest/ref/Command%20Line/run-script.html

关于java - 如何在 Grails 环境中从命令行运行 Groovy 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com