Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions src/main/java/dev/jbang/devkitman/Jdk.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.jspecify.annotations.Nullable;

import dev.jbang.devkitman.jdkproviders.ExternalJdkProvider;
import dev.jbang.devkitman.util.FileUtils;
import dev.jbang.devkitman.util.JavaUtils;

public interface Jdk extends Comparable<Jdk> {
Expand Down Expand Up @@ -229,12 +230,7 @@ public Default(
@Override
@NonNull
public InstalledJdk linked() {
Path jdkHome;
try {
jdkHome = home().toRealPath();
} catch (Exception e) {
jdkHome = home().toAbsolutePath();
}
Path jdkHome = FileUtils.realPath(home());
// First look for a Jdk in updatable non-linking providers
InstalledJdk linkedJdk = getLinkedJdk(jdkHome, p -> p.canUpdate() && !p.hasLinkedVersions());
if (linkedJdk == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@
import org.jspecify.annotations.Nullable;

import dev.jbang.devkitman.Jdk;
import dev.jbang.devkitman.util.FileUtils;
import dev.jbang.devkitman.util.JavaUtils;

public abstract class BaseFoldersJdkProvider extends BaseJdkProvider {
protected final Path jdksRoot;
protected final Path realRoot;

private static final Logger LOGGER = Logger.getLogger(BaseFoldersJdkProvider.class.getName());

protected BaseFoldersJdkProvider(Path jdksRoot) {
this.jdksRoot = jdksRoot;
this.realRoot = FileUtils.realPath(jdksRoot);
}

@Override
Expand Down Expand Up @@ -130,7 +133,7 @@ protected Stream<Path> listJdkPaths() throws IOException {
}

protected boolean acceptFolder(@NonNull Path jdkFolder) {
return jdkFolder.startsWith(jdksRoot) && JavaUtils.hasJavacCmd(jdkFolder);
return (jdkFolder.startsWith(jdksRoot) || jdkFolder.startsWith(realRoot)) && JavaUtils.hasJavacCmd(jdkFolder);
}

private final Pattern validId = Pattern.compile("^[a-zA-Z0-9._+-]+$");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ public class LinuxJdkProvider extends BaseFoldersJdkProvider {
private static final Path JDKS_ROOT = Paths.get("/usr/lib/jvm");

public LinuxJdkProvider() {
super(jdksRoot());
this(jdksRoot());
}

LinuxJdkProvider(@NonNull Path jdksRoot) {
super(jdksRoot);
}

public static Path jdksRoot() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class MacJdkProvider extends BaseFoldersJdkProvider {
private static final String CONTENTS_HOME = "Contents/Home";

public MacJdkProvider() {
super(jdksRoot());
this(jdksRoot());
}

MacJdkProvider(@NonNull Path jdksRoot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ public class MiseJdkProvider extends BaseFoldersJdkProvider {
private static final Path JDKS_ROOT = Paths.get(".local", "share", "mise", "installs", "java");

public MiseJdkProvider() {
super(jdksRoot());
this(jdksRoot());
}

MiseJdkProvider(@NonNull Path jdksRoot) {
super(jdksRoot);
}

public static Path jdksRoot() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ public class ScoopJdkProvider extends BaseFoldersJdkProvider {
private static final Path JDKS_ROOT = Paths.get("scoop", "apps");

public ScoopJdkProvider() {
super(jdksRoot());
this(jdksRoot());
}

ScoopJdkProvider(@NonNull Path jdksRoot) {
super(jdksRoot);
}

public static Path jdksRoot() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ public class SdkmanJdkProvider extends BaseFoldersJdkProvider {
private static final Path JDKS_ROOT = Paths.get(".sdkman", "candidates", "java");

public SdkmanJdkProvider() {
super(jdksRoot());
this(jdksRoot());
}

SdkmanJdkProvider(@NonNull Path jdksRoot) {
super(jdksRoot);
}

public static Path jdksRoot() {
Expand Down
7 changes: 1 addition & 6 deletions src/main/java/dev/jbang/devkitman/util/JavaUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,7 @@ public static Path getJavaHomeEnv() {
public static Path jre2jdk(@NonNull Path jdkHome) {
// Detect if the current JDK is a JRE and try to find the real home
if (!Files.isRegularFile(jdkHome.resolve("release"))) {
Path jh = jdkHome.toAbsolutePath();
try {
jh = jh.toRealPath();
} catch (IOException e) {
// Ignore error
}
Path jh = FileUtils.realPath(jdkHome);
if (jh.endsWith("jre") && Files.isRegularFile(jh.getParent().resolve("release"))) {
jdkHome = jh.getParent();
}
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/dev/jbang/devkitman/TestJdkManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.junit.jupiter.api.io.TempDir;

import dev.jbang.devkitman.jdkproviders.DefaultJdkProvider;
import dev.jbang.devkitman.jdkproviders.JavaHomeJdkProvider;
Expand Down Expand Up @@ -125,6 +126,15 @@ void testDefaultCustomLinkPath() {
assertThat(jm.getDefaultJdk().id(), is("default"));
}

@Test
void testDefaultUnstableBasePath(@TempDir Path tempPath1, @TempDir Path tempPath2) throws IOException {
Path tmp = tempPath1.resolve("dkmtest");
FileUtils.createLink(tmp, tempPath2);
System.setProperty("user.home", tmp.resolve("home").toString());
config = new JdkDiscovery.Config(tmp.resolve("jdks"), null, null);
testDefault();
}

@Test
void testHomeDir() {
Arrays.asList(11, 14, 17).forEach(this::createMockJdk);
Expand Down
Loading