我们有一种情况,我们在运行gradle的VM中占用一个Jetty实例。
但是,当我们在gradle守护程序中运行时,这会非常糟糕:我们没有完全摆脱Jetty实例,所以它必须与gradle进程本身一起消亡。 (但是,这并不是一个大问题,因为我们不希望这个CI集成测试案例中的gradle守护程序。)
因此,我们想知道当前任务是否在gradle守护程序中运行 - 以便我们可以抛出异常或以其他方式通知用户这是错误的方法,请运行此une daemonized。
答案 0 :(得分:6)
Gradle命名其中一个线程"守护程序线程"所以,如果你允许黑客入侵,这可能有效:
def isDaemon = Thread.allStackTraces.keySet.any { it.name.contains "Daemon" };
答案 1 :(得分:2)
另一种解决方案是阅读“sun.java.command”属性。
如果你在守护进程中,gradle 2.5的值是
org.gradle.launcher.daemon.bootstrap.GradleDaemon 2.5
如果你不是价值
org.gradle.launcher.GradleMain taskName
这么简单
if (System.properties.'sun.java.command'.contains('launcher.daemon')) {
println 'Daemon is true'
} else {
println 'Daemon is false'
}
也可以做到这一点
答案 2 :(得分:0)
我想从gradle插件的上下文中了解这一点。在检查了gradle源之后,我最终使用以下方法找到了答案:
val daemonScanInfo: DaemonScanInfo? = (project as DefaultProject).services.get(DaemonScanInfo::class.java)
val runningAsDaemon = !daemonScanInfo.isSingleUse
这样做的好处是能够检测到--no-daemon
以及定义org.gradle.daemon=true|false
。 project.findProperty("org.gradle.jvmargs")
并没有在命令行上捕获--no-daemon。