如何知道您是否在gradle守护程序中运行

时间:2014-04-24 09:39:35

标签: gradle gradle-daemon

我们有一种情况,我们在运行gradle的VM中占用一个Jetty实例。

但是,当我们在gradle守护程序中运行时,这会非常糟糕:我们没有完全摆脱Jetty实例,所以它必须与gradle进程本身一起消亡。 (但是,这并不是一个大问题,因为我们不希望这个CI集成测试案例中的gradle守护程序。)

因此,我们想知道当前任务是否在gradle守护程序中运行 - 以便我们可以抛出异常或以其他方式通知用户这是错误的方法,请运行此une daemonized。

3 个答案:

答案 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|falseproject.findProperty("org.gradle.jvmargs")并没有在命令行上捕获--no-daemon。