9

gradle を実行する VM 内で Jetty インスタンスを使用する状況があります。

ただし、gradle デーモン内で実行している場合、これはかなり失敗します。Jetty インスタンスを完全に削除するわけではないため、gradle プロセス自体で停止する必要があります。(ただし、この CI 統合テスト ケースではとにかく gradle デーモンが必要ないため、これは大きな問題ではありません)。

そのため、現在のタスクが gradle デーモン内で実行されているかどうかを知りたいです。例外をスローするか、これが間違ったアプローチであることをユーザーに通知できるように、デーモン化されていない状態で実行してください。

4

3 に答える 3

7

Gradle はそのスレッドの 1 つに「デーモン スレッド」という名前を付けているため、ハッキングを許可すると、次のように動作する可能性があります。

def isDaemon = Thread.allStackTraces.keySet.any { it.name.contains "Daemon" };
于 2014-06-26T21:13:39.953 に答える
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'
}

あまりにもトリックを行うだろう

于 2015-07-22T10:23:59.580 に答える