Skip to content

Commit 6decb1a

Browse files
committed
feat: allow setting jdk default per version
Added a flag `--for-version` (or `-v`) to the `jdk default` command to allow setting the default Jdk to use for a specific major version. This is necessary now that we allow multiple Jdks of the same major version to be installed simultaneously.
1 parent 4c02c61 commit 6decb1a

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/main/java/dev/jbang/cli/Jdk.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,9 @@ public Integer exec(
306306
@CommandLine.Command(name = "default", description = "Sets the default JDK to be used by JBang.")
307307
public Integer defaultJdk(
308308
@CommandLine.Parameters(paramLabel = "versionOrId", index = "0", description = "The version of the JDK to select", arity = "0..1") String versionOrId,
309+
@CommandLine.Option(names = {
310+
"--for-version",
311+
"-v" }, description = "Sets the default for the specified major version") boolean forVersion,
309312
@CommandLine.Option(names = {
310313
"--show-details", "--details",
311314
"-d" }, description = "Shows detailed information for each JDK (only when format=text)") boolean details,
@@ -316,11 +319,17 @@ public Integer defaultJdk(
316319
Util.warnMsg("Cannot perform operation, the 'default' provider was not found");
317320
return EXIT_INVALID_INPUT;
318321
}
319-
dev.jbang.devkitman.Jdk.InstalledJdk defjdk = jdkMan.getDefaultJdk();
320322
if (versionOrId != null) {
321323
dev.jbang.devkitman.Jdk.InstalledJdk jdk = jdkMan.getOrInstallJdk(versionOrId);
324+
dev.jbang.devkitman.Jdk.InstalledJdk defjdk = forVersion
325+
? jdkMan.getDefaultJdkForVersion(jdk.majorVersion())
326+
: jdkMan.getDefaultJdk();
322327
if (defjdk == null || (!jdk.equals(defjdk) && !Objects.equals(jdk.home(), defjdk.home()))) {
323-
jdkMan.setDefaultJdk(jdk);
328+
if (forVersion) {
329+
jdkMan.setDefaultJdkForVersion(jdk);
330+
} else {
331+
jdkMan.setDefaultJdk(jdk);
332+
}
324333
} else {
325334
Util.infoMsg("Default JDK already set to " + defjdk.majorVersion());
326335
}

src/main/java/dev/jbang/util/JavaUtil.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ public static JdkManager defaultJdkManager(String... names) {
3939
@NonNull
4040
public static JdkManager defaultJdkManager(List<String> providers, List<String> vendors) {
4141
return (new JdkManBuilder())
42-
.provider(providers)
43-
.vendor(vendors)
44-
.defaultJavaVersion(Settings.getDefaultJavaVersion())
45-
.build();
42+
.provider(providers)
43+
.vendor(vendors)
44+
.defaultJavaVersion(Settings.getDefaultJavaVersion())
45+
.build();
4646
}
4747

4848
public static class JdkManBuilder extends JdkManager.Builder {

src/test/java/dev/jbang/cli/TestJdk.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ void testJdksAvailable() throws Exception {
8686
void testDefault() throws Exception {
8787
Arrays.asList(11, 12, 13).forEach(this::createMockJdk);
8888

89-
CaptureResult<Integer> result = checkedRun(jdk -> jdk.defaultJdk("12", false, FormatMixin.Format.text));
89+
CaptureResult<Integer> result = checkedRun(jdk -> jdk.defaultJdk("12", false, false, FormatMixin.Format.text));
9090

9191
assertThat(result.result, equalTo(SUCCESS_EXIT));
9292
assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 12"));
9393

94-
result = checkedRun(jdk -> jdk.defaultJdk(null, false, FormatMixin.Format.text));
94+
result = checkedRun(jdk -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text));
9595

9696
assertThat(result.result, equalTo(SUCCESS_EXIT));
9797
assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 12\n"));
@@ -101,12 +101,12 @@ void testDefault() throws Exception {
101101
void testDefaultPlus() throws Exception {
102102
Arrays.asList(11, 14, 17).forEach(this::createMockJdk);
103103

104-
CaptureResult<Integer> result = checkedRun(jdk -> jdk.defaultJdk("16+", false, FormatMixin.Format.text));
104+
CaptureResult<Integer> result = checkedRun(jdk -> jdk.defaultJdk("16+", false, false, FormatMixin.Format.text));
105105

106106
assertThat(result.result, equalTo(SUCCESS_EXIT));
107107
assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 17"));
108108

109-
result = checkedRun(jdk -> jdk.defaultJdk(null, false, FormatMixin.Format.text));
109+
result = checkedRun(jdk -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text));
110110

111111
assertThat(result.result, equalTo(SUCCESS_EXIT));
112112
assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 17\n"));
@@ -233,14 +233,15 @@ void testDefaultWithJavaHome() throws Exception {
233233
initMockJdkDir(jdkPath, "12.0.7");
234234
environmentVariables.set("JAVA_HOME", jdkPath.toString());
235235

236-
CaptureResult<Integer> result = checkedRun((Jdk jdk) -> jdk.defaultJdk("12", false, FormatMixin.Format.text),
236+
CaptureResult<Integer> result = checkedRun(
237+
(Jdk jdk) -> jdk.defaultJdk("12", false, false, FormatMixin.Format.text),
237238
"jdk", "--jdk-providers",
238239
"default,javahome,jbang");
239240

240241
assertThat(result.result, equalTo(SUCCESS_EXIT));
241242
assertThat(result.normalizedErr(), startsWith("[jbang] Default JDK set to 12"));
242243

243-
result = checkedRun(jdk -> jdk.defaultJdk(null, false, FormatMixin.Format.text));
244+
result = checkedRun(jdk -> jdk.defaultJdk(null, false, false, FormatMixin.Format.text));
244245

245246
assertThat(result.result, equalTo(SUCCESS_EXIT));
246247
assertThat(result.normalizedErr(), equalTo("[jbang] Default JDK is currently set to 12\n"));

0 commit comments

Comments
 (0)