从 gradle 中运行 groovy 脚本
创建运行 Groovy 脚本的 gradle 任务的最佳方法是什么?我意识到 gradle 构建文件是 groovy,所以我认为可以做这样的事情:
task run << {
Script app = new GroovyShell().parse(new File("examples/foo.groovy"))
// or replace .parse() w/ a .evalulate()?
app.run()
}
如果 bar.groovy 使用 @Grab
注释,当我尝试此操作时,我会收到各种奇怪的错误甚至进行简单的导入。我想创建一个 gradle 任务来处理这个问题,这样我就可以重用类路径定义。
将 examples 目录移动到 src 目录中的某个位置会更好吗?最佳实践是什么?
What's the best way to create a gradle task, which runs a groovy script? I realize that gradle build files are groovy, so I would think it would be possible to do something like this:
task run << {
Script app = new GroovyShell().parse(new File("examples/foo.groovy"))
// or replace .parse() w/ a .evalulate()?
app.run()
}
I get all kinds of whacky errors when I try this if bar.groovy is using @Grab
annotations or even doing simple imports. I want to create a gradle task to handle this, so that I can hopefully reuse the classpath definition.
Would it be better to move the examples directory into the src directory somewhere? What's a best practice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
或者你可以这样做:
Or you could do:
您可以尝试使用 GroovyScriptEngine 而不是 GroovyShell。我之前已经将它与@Grab 注释一起使用。您将需要类路径上的所有 groovy,groovy-all.jar 还不够。我猜 Ivy 没有打包在 groovy-all.jar 中。像这样的东西应该能解决问题:
这个脚本假定 /tmp/HelloWorld.groovy 中有一个 groovy 脚本
You could try using GroovyScriptEngine instead of the GroovyShell. I've used it previously with @Grab annotations. You will need all of groovy on the classpath, the groovy-all.jar will not be enough. I'm guessing Ivy isn't packaged in the groovy-all.jar. Something like this should to the trick:
This script presumes a groovy script at /tmp/HelloWorld.groovy
http://wayback .archive.org/web/20131006153845/http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-runningthingsfromGradle
http://wayback.archive.org/web/20131006153845/http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-runningthingsfromGradle
我认为您可能需要将脚本作为新进程运行...例如,
我猜测 Gradle 的执行方式不是通过调用 groovy ,因此使 @Grab 工作的设置永远不会发生。也可能是 Gradle 使用的 Groovy 版本不支持 @Grab。
I think you probably need to run the script as a new process... e.g.,
I would guess that the way Gradle is executed is not via invoking
groovy
, so the setup that makes @Grab work never happens. It could also be the the version of Groovy that Gradle uses doesn't support @Grab.