作为不同用户执行的Gradle任务

时间:2017-07-11 10:04:04

标签: gradle

我设置了Gradle任务来运行Java类:

task runEchoServerTest(type: JavaExec, dependsOn: [compileTestJava]) {
    classpath sourceSets.main.runtimeClasspath

    main = 'EchoServerTest'
}

但我希望以超级用户身份运行它,并且不想输入sudo gradle runEchoServerTest。可以在Gradle中更改正在运行的用户吗?这个问题愚蠢吗?

更新

按照@ NikitaSkvortsov的建议,我添加了这个任务:

task sudoRunEchoServerTest(type: Exec, dependsOn: [compileTestJava]) {
    commandLine "sudo " + tasks.runEchoServerTest.commandLine.join(" ")
}

我没有添加密码,因为我正在使用Raspberry Pi,其中sudo可以在没有密码的情况下使用。

我执行了该任务,但失败了。要了解更多信息,请使用--stacktrace重新运行。这是关键信息(为便于阅读而编辑):

Caused by: java.io.IOException: 
Cannot run program "sudo /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/bin/java 
-Djava.library.path=./native/linux 
-Dfile.encoding=UTF-8 
-Duser.country=GB 
-Duser.language=en 
-Duser.variant 
-cp /home/pi/bloomm/build/classes/java/main:/home/pi/bloomm/build/resources/main:/home/pi/bloomm/build/classes/java/test:/home/pi/bloomm/build/resources/test EchoServerTest" 
(in directory "/home/pi/bloomm"): 
error=2, No such file or directory

有趣的是,如果我将整个命令复制到命令行并运行它,它就可以了!

那么,哪里可能出错?

1 个答案:

答案 0 :(得分:0)

无论如何,您必须致电susudo,因为我们不能简单地更改操作系统中当前对进程的使用:)

为此,再添加一个exec任务,获取预先配置的java exec的有效命令行并预先添加" sudo"。别忘了提供密码!

task doPriveleged(type: Exec, dependsOn: [compileTestJava]) {
    commandLine "echo $sudo_password | sudo -S " + tasks.runEchoServerTest.commandLine.join(" ")
}