mac*_*ack 18 groovy gradle groovyclassloader
创建一个运行groovy脚本的gradle任务的最佳方法是什么?我意识到gradle构建文件是常规的,所以我认为可以做这样的事情:
task run << {
Script app = new GroovyShell().parse(new File("examples/foo.groovy"))
// or replace .parse() w/ a .evalulate()?
app.run()
}
Run Code Online (Sandbox Code Playgroud)
如果bar.groovy正在使用@Grab注释甚至是简单的导入,那么当我尝试这个时,我会遇到各种各样的错误.我想创建一个任务的Gradle来处理这个问题,让我能有希望重用的类路径定义.
将examples目录移动到某个地方的src目录会更好吗?什么是最佳做法?
您可以尝试使用GroovyScriptEngine而不是GroovyShell.我之前使用过@Grab注释.你将需要类路径上的所有groovy,groovy-all.jar是不够的.我猜Ivy没有打包在groovy-all.jar中.这样的事情应该是诀窍:
这个脚本假定在/tmp/HelloWorld.groovy上有一个groovy脚本
def pathToFolderOfScript = '/tmp'
def gse = new GroovyScriptEngine([pathToFolderOfScript] as String[])
gse.run('HelloWorld.groovy', new Binding())
Run Code Online (Sandbox Code Playgroud)
我认为您可能需要将脚本作为新进程运行...例如,
["groovy","examples/foo.groovy"].execute()
Run Code Online (Sandbox Code Playgroud)
我猜想 Gradle 的执行方式不是通过调用groovy,因此使 @Grab 工作的设置永远不会发生。也可能是 Gradle 使用的 Groovy 版本不支持 @Grab。
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |