提问者:小点点

如何在另一个java进程中从Gradle任务运行Groovy脚本?


假设您有一个以System. exit(…)调用结尾的Groovy脚本,并且您希望在Gradle任务中执行此Groovy脚本。由于System.exit调用将终止整个JVM您希望在另一个Java进程中运行此脚本(因为使用GroovyShell似乎不是一个选项,因为System.exit调用)。如果不使用单独的Groovy安装的groovy命令,您如何做到这一点?

如果这样的东西可能会起作用,我必须如何替换???????

  javaexec {
    classpath = ???
    mainClass = ????
    args = ['my-script.groovy']
  }

[编辑]好的,这是下面评论中提到的“最小可重现示例”,如果这使问题更容易理解的话:

Groovy脚本:

    // file: my-script.groovy

    println 'Hello World'
    System.exit(0)

Gradle任务(这可能是完全错误的,我不知道如何替换问号):

task runMyScript(type: JavaExec) {
  classpath = ???
  mainClass = ????
  args = ['my-script.groovy']
}

共1个答案

匿名用户

如何运行groovy脚本使用java命令行,你可以检查groovy shell/批处理:

https://github.com/apache/groovy/blob/master/src/bin/groovy.bat#L30

java -cp "$GROOVY_HOME/lib" groovy.ui.GroovyMain myscript.groovy

唯一的问题是找出gradle/lib文件夹,通常groovy-all位于其中

我可以直截了当地建议:

def groovyJar = new File(groovy.ui.GroovyMain.getProtectionDomain().getCodeSource()?.getLocation()?.toURI())