
org.gradle.integtests.fixtures.jvm.InstalledJvmLocator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.integtests.fixtures.jvm;
import net.rubygrapefruit.platform.SystemInfo;
import net.rubygrapefruit.platform.WindowsRegistry;
import org.gradle.api.internal.file.TestFiles;
import org.gradle.internal.jvm.Jvm;
import org.gradle.internal.nativeintegration.filesystem.FileCanonicalizer;
import org.gradle.internal.os.OperatingSystem;
import java.io.File;
import java.util.*;
public class InstalledJvmLocator {
private final OperatingSystem operatingSystem;
private final Jvm currentJvm;
private final WindowsRegistry windowsRegistry;
private final SystemInfo systemInfo;
private final FileCanonicalizer fileCanonicalizer;
public InstalledJvmLocator(OperatingSystem currentOperatingSystem, Jvm currentJvm, WindowsRegistry windowsRegistry, SystemInfo systemInfo, FileCanonicalizer fileCanonicalizer) {
this.operatingSystem = currentOperatingSystem;
this.currentJvm = currentJvm;
this.windowsRegistry = windowsRegistry;
this.systemInfo = systemInfo;
this.fileCanonicalizer = fileCanonicalizer;
}
/**
* Discovers JVMs installed on the local machine. Returns the details of each JVM that can be determined efficiently, without running the JVM.
*
* @return The JVMs, ordered from highest to lowest Java version. Will include the current JVM.
*/
public List findJvms() {
Map installs = new HashMap();
Collection jvms;
if (operatingSystem.isMacOsX()) {
jvms = new OsXInstalledJvmLocator(TestFiles.execHandleFactory()).findJvms();
} else if (operatingSystem.isWindows()) {
jvms = new WindowsOracleJvmLocator(windowsRegistry, systemInfo).findJvms();
} else if (operatingSystem.isLinux()) {
jvms = new UbuntuJvmLocator(fileCanonicalizer).findJvms();
} else {
jvms = Collections.emptySet();
}
for (JvmInstallation jvm : jvms) {
if (!installs.containsKey(jvm.getJavaHome())) {
installs.put(jvm.getJavaHome(), jvm);
}
}
if (!installs.containsKey(currentJvm.getJavaHome())) {
// TODO - this isn't quite right
boolean isJdk = currentJvm.getJre() == null || !currentJvm.getJre().getHomeDir().equals(currentJvm.getJavaHome());
installs.put(currentJvm.getJavaHome(), new JvmInstallation(currentJvm.getJavaVersion(), System.getProperty("java.version"), currentJvm.getJavaHome(), isJdk, toArch(System.getProperty("os.arch"))));
}
List result = new ArrayList(installs.values());
Collections.sort(result, new Comparator() {
public int compare(JvmInstallation o1, JvmInstallation o2) {
return o2.getVersion().compareTo(o1.getVersion());
}
});
return result;
}
private JvmInstallation.Arch toArch(String arch) {
if (arch.equals("amd64") || arch.equals("x86_64")) {
return JvmInstallation.Arch.x86_64;
}
if (arch.equals("i386")) {
return JvmInstallation.Arch.i386;
}
return JvmInstallation.Arch.Unknown;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy