创建一个运行groovy脚本的gradle任务的最佳方法是什么?我意识到gradle构建文件是常规的,所以我认为可以这样做:
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目录会不会更好?什么是最佳实践?
答案 0 :(得分:13)
或者你可以这样做:
new GroovyShell().run(file('somePath'))
答案 1 :(得分:7)
您可以尝试使用GroovyScriptEngine而不是GroovyShell。我之前使用过@Grab注释。你将需要类路径上的所有groovy,groovy-all.jar是不够的。我猜Ivy没有打包在groovy-all.jar中。这样的事情应该是诀窍:
此脚本假定在/tmp/HelloWorld.groovy
的常规脚本def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())
答案 2 :(得分:2)
ant.java(classname: 'com.my.classname', fork: true,
classpath: "${sourceSets.main.runtimeClasspath.asPath}")
答案 3 :(得分:1)
我认为您可能需要将脚本作为新进程运行...例如,
["groovy","examples/foo.groovy"].execute()
我猜想Gradle的执行方式不是通过调用groovy
,因此使@Grab工作的设置永远不会发生。它也可能是Gradle使用的Groovy版本不支持@Grab。