Skip to content

Commit 6cb17a3

Browse files
authored
Simplify java home verification (#55635)
* Simplify java home verification At one time, all uses of java home were found through the getJavaHome utility method on BuildPlugin. However, that was changed many refactorings ago, but the complex support for registering a java home version needed that fails at configuration time still exists. The only remaining use of grabbing java home is within bwc tests, and must be at runtime since that is when we have the checkout and know what version is needed. This commit consolidates the java home finding method into a utility unassociated with BuildPlugin. * fix checkstyle * address feedback
1 parent 724e24d commit 6cb17a3

File tree

4 files changed

+40
-59
lines changed

4 files changed

+40
-59
lines changed

buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -182,60 +182,6 @@ class BuildPlugin implements Plugin<Project> {
182182
}
183183
}
184184

185-
/** Add a check before gradle execution phase which ensures java home for the given java version is set. */
186-
static void requireJavaHome(Task task, int version) {
187-
// use root project for global accounting
188-
Project rootProject = task.project.rootProject
189-
ExtraPropertiesExtension extraProperties = rootProject.extensions.extraProperties
190-
191-
// hacky way (but the only way) to find if the task graph has already been populated
192-
boolean taskGraphReady
193-
try {
194-
rootProject.gradle.taskGraph.getAllTasks()
195-
taskGraphReady = true
196-
} catch (IllegalStateException) {
197-
taskGraphReady = false
198-
}
199-
200-
if (taskGraphReady) {
201-
// check directly if the version is present since we are already executing
202-
if (BuildParams.javaVersions.find { it.version == version } == null) {
203-
throw new GradleException("JAVA${version}_HOME required to run task:\n${task}")
204-
}
205-
} else {
206-
// setup list of java versions we will check at the end of configuration time
207-
if (extraProperties.has('requiredJavaVersions') == false) {
208-
extraProperties.set('requiredJavaVersions', [:])
209-
rootProject.gradle.taskGraph.whenReady { TaskExecutionGraph taskGraph ->
210-
List<String> messages = []
211-
Map<Integer, List<Task>> requiredJavaVersions = (Map<Integer, List<Task>>) extraProperties.get('requiredJavaVersions')
212-
for (Map.Entry<Integer, List<Task>> entry : requiredJavaVersions) {
213-
if (BuildParams.javaVersions.any { it.version == entry.key }) {
214-
continue
215-
}
216-
List<String> tasks = entry.value.findAll { taskGraph.hasTask(it) }.collect { " ${it.path}".toString() }
217-
if (tasks.isEmpty() == false) {
218-
messages.add("JAVA${entry.key}_HOME required to run tasks:\n${tasks.join('\n')}".toString())
219-
}
220-
}
221-
if (messages.isEmpty() == false) {
222-
throw new GradleException(messages.join('\n'))
223-
}
224-
}
225-
}
226-
Map<Integer, List<Task>> requiredJavaVersions = (Map<Integer, List<Task>>) extraProperties.get('requiredJavaVersions')
227-
requiredJavaVersions.putIfAbsent(version, [])
228-
requiredJavaVersions.get(version).add(task)
229-
}
230-
}
231-
232-
/** A convenience method for getting java home for a version of java and requiring that version for the given task to execute */
233-
static String getJavaHome(final Task task, final int version) {
234-
requireJavaHome(task, version)
235-
JavaHome java = BuildParams.javaVersions.find { it.version == version }
236-
return java == null ? null : java.javaHome.get().absolutePath
237-
}
238-
239185
/**
240186
* Makes dependencies non-transitive.
241187
*
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.elasticsearch.gradle.util;
21+
22+
import org.elasticsearch.gradle.info.BuildParams;
23+
import org.elasticsearch.gradle.info.JavaHome;
24+
import org.gradle.api.GradleException;
25+
26+
import java.util.List;
27+
import java.util.Optional;
28+
29+
public class JavaUtil {
30+
31+
/** A convenience method for getting java home for a version of java and requiring that version for the given task to execute */
32+
static String getJavaHome(final int version) {
33+
List<JavaHome> javaHomes = BuildParams.getJavaVersions();
34+
Optional<JavaHome> java = javaHomes.stream().filter(j -> j.getVersion() == version).findFirst();
35+
return java.orElseThrow(() -> new GradleException("JAVA" + version + "_HOME required")).getJavaHome().get().getAbsolutePath();
36+
}
37+
}

distribution/bwc/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import org.gradle.util.GradleVersion
2727

2828
import java.nio.charset.StandardCharsets
2929

30-
import static org.elasticsearch.gradle.BuildPlugin.getJavaHome
30+
import static org.elasticsearch.gradle.util.JavaUtil.getJavaHome
3131

3232
/**
3333
* We want to be able to do BWC tests for unreleased versions without relying on and waiting for snapshots.
@@ -166,7 +166,7 @@ bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleased
166166
List<String> lines = file("${checkoutDir}/.ci/java-versions.properties").readLines()
167167
environment(
168168
'JAVA_HOME',
169-
getJavaHome(it, Integer.parseInt(
169+
getJavaHome(Integer.parseInt(
170170
lines
171171
.findAll({ it.startsWith("ES_BUILD_JAVA=") })
172172
.collect({ it.replace("ES_BUILD_JAVA=java", "").trim() })
@@ -176,7 +176,7 @@ bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleased
176176
)
177177
environment(
178178
'RUNTIME_JAVA_HOME',
179-
getJavaHome(it, Integer.parseInt(
179+
getJavaHome(Integer.parseInt(
180180
lines
181181
.findAll({ it.startsWith("ES_RUNTIME_JAVA=java") })
182182
.collect({ it.replace("ES_RUNTIME_JAVA=java", "").trim() })

modules/reindex/build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import org.elasticsearch.gradle.Architecture
2222
import org.elasticsearch.gradle.OS
2323
import org.elasticsearch.gradle.info.BuildParams
2424

25-
import static org.elasticsearch.gradle.BuildPlugin.getJavaHome
26-
2725
apply plugin: 'elasticsearch.test-with-dependencies'
2826
apply plugin: 'elasticsearch.jdk-download'
2927

0 commit comments

Comments
 (0)