dev.jbang.net.jdkproviders.PathJdkProvider Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jbang-cli Show documentation
Show all versions of jbang-cli Show documentation
JBang Command Line Interface
package dev.jbang.net.jdkproviders;
import static dev.jbang.util.JavaUtil.resolveJavaVersionStringFromPath;
import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import dev.jbang.net.JdkProvider;
import dev.jbang.util.Util;
/**
* This JDK provider detects if a JDK is already available on the system by
* first looking at the user's PATH
.
*/
public class PathJdkProvider implements JdkProvider {
@Nonnull
@Override
public List listInstalled() {
Path jdkHome = null;
Path javac = Util.searchPath("javac");
if (javac != null) {
javac = javac.toAbsolutePath();
jdkHome = javac.getParent().getParent();
}
if (jdkHome != null) {
Optional version = resolveJavaVersionStringFromPath(jdkHome);
if (version.isPresent()) {
String id = "path";
return Collections.singletonList(createJdk(id, jdkHome, version.get()));
}
}
return Collections.emptyList();
}
@Nullable
@Override
public Jdk getJdkById(@Nonnull String id) {
if (id.equals(name())) {
List l = listInstalled();
if (!l.isEmpty()) {
return l.get(0);
}
}
return null;
}
@Nullable
@Override
public Jdk getJdkByPath(@Nonnull Path jdkPath) {
List installed = listInstalled();
Jdk def = !installed.isEmpty() ? installed.get(0) : null;
return def != null && def.getHome() != null && jdkPath.startsWith(def.getHome()) ? def : null;
}
}