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

作为不同用户执行的Gradle任务,gradle,Gradle,我设置了一个Gradle任务来运行Java类: task runEchoServerTest(type: JavaExec, dependsOn: [compileTestJava]) { classpath sourceSets.main.runtimeClasspath main = 'EchoServerTest' } 但我想以超级用户的身份运行它,不想键入sudo gradle runEchoServerTest。可以在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(" ")
}
我没有添加密码,因为我正在开发一个树莓Pi,在这里,
sudo
可以在没有密码的情况下使用

我运行了那个任务,但失败了。为了了解更多信息,我使用
--stacktrace
再次运行它。以下是关键信息(为便于阅读而编辑):

有趣的是,如果我将整个命令复制到命令行并运行它,它就会工作


那么,还有什么地方会出错呢?

无论如何,您都必须调用
su
sudo
,因为不能简单地在操作系统中更改进程的当前用户:)

为此,再添加一个exec任务,获取预配置的javaexec的有效命令行,并预先设置“sudo”。不要忘记提供密码

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

谢谢你,@NikitaSkvortsov。我的思维方式是使用流程管理工具(如systemd),在这里我可以指定流程应该由哪个用户运行。这些工具本身以root用户身份运行。这就是为什么他们可以切换用户。你们提醒我Gradle不是这样一个工具,不能简单地改变用户,现在我明白了。不管怎样,我听从你的建议,但似乎不起作用。我已经更新了我原来的问题,包括更多的经验。无论如何谢谢你。@NickLee对不起,我手边没有树莓圆周率,所以很难重现这个问题。尝试使用稍微修改的
commadLine
值,如下所示:
commandLine“sudo”、tasks.runEchoServerTest.commandLine.join(“”)
,但仍然失败。但是没关系。这是一个小问题,不值得花更多的时间。无论如何,谢谢你的帮助。
task doPriveleged(type: Exec, dependsOn: [compileTestJava]) {
    commandLine "echo $sudo_password | sudo -S " + tasks.runEchoServerTest.commandLine.join(" ")
}