3232import java .util .concurrent .atomic .AtomicBoolean ;
3333
3434import org .gradle .api .Transformer ;
35+ import org .gradle .process .internal .JvmOptions ;
3536import org .gradle .workers .internal .DaemonForkOptions ;
3637import org .gradle .workers .internal .WorkerDaemonClientsManager ;
3738
@@ -45,7 +46,7 @@ public static boolean stopIdleJVM(WorkerDaemonClientsManager manager, String jvm
4546 Transformer <List <Object >, List <Object >> transformer = workerDaemonClients -> {
4647 for (Object /* WorkerDaemonClient */ client : workerDaemonClients ) {
4748 DaemonForkOptions forkOptions = getForkOptions (client );
48- Map <String , Object > systemProperties = forkOptions . getJavaForkOptions (). getSystemProperties ();
49+ Map <String , Object > systemProperties = getSystemProperties (forkOptions );
4950
5051 if (systemProperties == null || !jvmMarkerValue .equals (systemProperties .get (MARKER_PROP ))) {
5152 // Not the JVM we are looking for
@@ -70,6 +71,30 @@ public static boolean stopIdleJVM(WorkerDaemonClientsManager manager, String jvm
7071 return stopped .get ();
7172 }
7273
74+ private static Map <String , Object > getSystemProperties (DaemonForkOptions forkOptions ) {
75+ try {
76+ Method getJavaForkOptionsMethod = forkOptions .getClass ().getDeclaredMethod ("getJavaForkOptions" );
77+ getJavaForkOptionsMethod .setAccessible (true );
78+ Object /* JavaForkOptions */ javaForkOptions = getJavaForkOptionsMethod .invoke (forkOptions );
79+ Method getSystemPropertiesMethod = javaForkOptions .getClass ().getDeclaredMethod ("getSystemProperties" );
80+ getSystemPropertiesMethod .setAccessible (true );
81+ //noinspection unchecked
82+ return (Map <String , Object >) getSystemPropertiesMethod .invoke (javaForkOptions );
83+ } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e ) {
84+ // Gradle 8.11 and below
85+ }
86+
87+ // Gradle 8.12+
88+ try {
89+ Method getJvmOptions = forkOptions .getClass ().getDeclaredMethod ("getJvmOptions" );
90+ getJvmOptions .setAccessible (true );
91+ JvmOptions jvmOptions = (JvmOptions ) getJvmOptions .invoke (forkOptions );
92+ return jvmOptions .getMutableSystemProperties ();
93+ } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e ) {
94+ throw new RuntimeException ("Failed to daemon system properties" , e );
95+ }
96+ }
97+
7398 private static DaemonForkOptions getForkOptions (Object /* WorkerDaemonClient */ client ) {
7499 try {
75100 Method getForkOptionsMethod = client .getClass ().getDeclaredMethod ("getForkOptions" );
0 commit comments