我设置了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
有趣的是,如果我将整个命令复制到命令行并运行它,它就可以了!
那么,哪里可能出错?
答案 0 :(得分:0)
无论如何,您必须致电su
或sudo
,因为我们不能简单地更改操作系统中当前对进程的使用:)
为此,再添加一个exec任务,获取预先配置的java exec的有效命令行并预先添加" sudo"。别忘了提供密码!
task doPriveleged(type: Exec, dependsOn: [compileTestJava]) {
commandLine "echo $sudo_password | sudo -S " + tasks.runEchoServerTest.commandLine.join(" ")
}