假设您有一个以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']
}
如何运行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())