@@ -216,41 +216,55 @@ class BuildPlugin implements Plugin<Project> {
216216 static void requireJavaHome (Task task , int version ) {
217217 // use root project for global accounting
218218 Project rootProject = task. project. rootProject
219- ExtraPropertiesExtension ext = rootProject. extensions. getByType( ExtraPropertiesExtension )
219+ ExtraPropertiesExtension extraProperties = rootProject. extensions. extraProperties
220220
221- if (rootProject. hasProperty(' requiredJavaVersions' ) == false ) {
222- ext. set(' requiredJavaVersions' , [:])
223- rootProject. gradle. taskGraph. whenReady({ TaskExecutionGraph taskGraph ->
224- List<String > messages = []
225- Map<Integer , List<Task > > requiredJavaVersions = (Map<Integer , List<Task > > ) ext. get(' requiredJavaVersions' )
226- for (Map.Entry < Integer , List<Task > > entry : requiredJavaVersions) {
227- if (BuildParams . javaVersions. find { it. version == entry. key } != null ) {
228- continue
229- }
230- List<String > tasks = entry. value. findAll { taskGraph. hasTask(it) }. collect { " ${ it.path} " . toString() }
231- if (tasks. isEmpty() == false ) {
232- messages. add(" JAVA${ entry.key} _HOME required to run tasks:\n ${ tasks.join('\n')} " . toString())
233- }
234- }
235- if (messages. isEmpty() == false ) {
236- throw new GradleException (messages. join(' \n ' ))
237- }
238- ext. set(' requiredJavaVersions' , null ) // reset to null to indicate the pre-execution checks have executed
239- })
240- } else if (ext. has(' requiredJavaVersions' ) == false || ext. get(' requiredJavaVersions' ) == null ) {
221+ // hacky way (but the only way) to find if the task graph has already been populated
222+ boolean taskGraphReady
223+ try {
224+ rootProject. gradle. taskGraph. getAllTasks()
225+ taskGraphReady = true
226+ } catch (IllegalStateException ) {
227+ taskGraphReady = false
228+ }
229+
230+ if (taskGraphReady) {
241231 // check directly if the version is present since we are already executing
242232 if (BuildParams . javaVersions. find { it. version == version } == null ) {
243233 throw new GradleException (" JAVA${ version} _HOME required to run task:\n ${ task} " )
244234 }
245235 } else {
246- (ext. get(' requiredJavaVersions' ) as Map<Integer , List<Task > > ). getOrDefault(version, []). add(task)
236+ // setup list of java versions we will check at the end of configuration time
237+ if (extraProperties. has(' requiredJavaVersions' ) == false ) {
238+ extraProperties. set(' requiredJavaVersions' , [:])
239+ rootProject. gradle. taskGraph. whenReady { TaskExecutionGraph taskGraph ->
240+ List<String > messages = []
241+ Map<Integer , List<Task > > requiredJavaVersions = (Map<Integer , List<Task > > ) extraProperties. get(' requiredJavaVersions' )
242+ task. logger. warn(requiredJavaVersions. toString())
243+ for (Map.Entry < Integer , List<Task > > entry : requiredJavaVersions) {
244+ if (BuildParams . javaVersions. any { it. version == entry. key }) {
245+ continue
246+ }
247+ List<String > tasks = entry. value. findAll { taskGraph. hasTask(it) }. collect { " ${ it.path} " . toString() }
248+ if (tasks. isEmpty() == false ) {
249+ messages. add(" JAVA${ entry.key} _HOME required to run tasks:\n ${ tasks.join('\n')} " . toString())
250+ }
251+ }
252+ if (messages. isEmpty() == false ) {
253+ throw new GradleException (messages. join(' \n ' ))
254+ }
255+ }
256+ }
257+ Map<Integer , List<Task > > requiredJavaVersions = (Map<Integer , List<Task > > ) extraProperties. get(' requiredJavaVersions' )
258+ requiredJavaVersions. putIfAbsent(version, [])
259+ requiredJavaVersions. get(version). add(task)
247260 }
248261 }
249262
250263 /* * A convenience method for getting java home for a version of java and requiring that version for the given task to execute */
251264 static String getJavaHome (final Task task , final int version ) {
252265 requireJavaHome(task, version)
253- return BuildParams . javaVersions. find { it. version == version }. javaHome. absolutePath
266+ JavaHome java = BuildParams . javaVersions. find { it. version == version }
267+ return java == null ? null : java. javaHome. absolutePath
254268 }
255269
256270 /**
0 commit comments