Skip to content

Commit 6542569

Browse files
committed
feat: can now install multiple JDKs of same major version
The jbang provider no longer uses the major version number to determine if a JDK has been installed or not. This means multiple JDKs can be installed that have the same major version. Fixes #46 # Conflicts: # src/main/java/dev/jbang/devkitman/jdkproviders/DefaultJdkProvider.java # src/main/java/dev/jbang/devkitman/jdkproviders/JBangJdkProvider.java # src/test/java/dev/jbang/devkitman/BaseTest.java
1 parent bdf150c commit 6542569

22 files changed

+773
-374
lines changed

.justfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ clean:
1010

1111
# build without tests
1212
build:
13-
./gradlew spotlessApply build -x test
13+
./gradlew spotlessApply build publishToMavenLocal -x test
1414

1515
# run tests
1616
test:

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

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,7 @@ public Default(
7878
@Override
7979
@NonNull
8080
public InstalledJdk install() {
81-
if (!provider.canUpdate()) {
82-
throw new UnsupportedOperationException(
83-
"Installing a JDK is not supported by " + provider);
84-
}
85-
return provider.install(this);
81+
return provider.manager().installJdk(this);
8682
}
8783

8884
@Override
@@ -101,11 +97,6 @@ interface InstalledJdk extends Jdk {
10197
@NonNull
10298
Path home();
10399

104-
/**
105-
* Determines if the JDK version is fixed or that it can change
106-
*/
107-
boolean isFixedVersion();
108-
109100
@Override
110101
default boolean isInstalled() {
111102
return true;
@@ -117,7 +108,6 @@ default boolean isInstalled() {
117108
void uninstall();
118109

119110
class Default extends Jdk.Default implements InstalledJdk {
120-
private final boolean fixedVersion;
121111
@Nullable
122112
private final Path home;
123113

@@ -130,18 +120,11 @@ public Default(
130120
@NonNull String id,
131121
@Nullable Path home,
132122
@NonNull String version,
133-
boolean fixedVersion,
134123
@Nullable Set<String> tags) {
135124
super(provider, id, version, tags != null ? tags : determineTagsFromJdkHome(home));
136-
this.fixedVersion = fixedVersion;
137125
this.home = home;
138126
}
139127

140-
@Override
141-
public boolean isFixedVersion() {
142-
return fixedVersion;
143-
}
144-
145128
@Override
146129
@NonNull
147130
public Path home() {
@@ -154,7 +137,7 @@ public Path home() {
154137

155138
@Override
156139
public void uninstall() {
157-
provider.uninstall(this);
140+
provider.manager().uninstallJdk(this);
158141
}
159142

160143
@Override
@@ -184,7 +167,8 @@ public int compareTo(Jdk o) {
184167

185168
@Override
186169
public String toString() {
187-
return majorVersion() + " (" + version + (isFixedVersion() ? " [fixed]" : " [dynamic]") + ", " + id
170+
return majorVersion() + " (" + version + (provider.hasFixedVersions() ? " [fixed]" : " [dynamic]")
171+
+ ", " + id
188172
+ ", "
189173
+ home + ", " + tags + "))";
190174
}
@@ -310,6 +294,14 @@ public static <T extends Jdk> Predicate<T> openVersion(int version) {
310294
return jdk -> jdk.majorVersion() >= version;
311295
}
312296

297+
public static <T extends Jdk> Predicate<T> minVersion(int version) {
298+
return jdk -> jdk.majorVersion() >= version;
299+
}
300+
301+
public static <T extends Jdk> Predicate<T> maxVersion(int version) {
302+
return jdk -> jdk.majorVersion() <= version;
303+
}
304+
313305
public static <T extends Jdk> Predicate<T> forVersion(String version) {
314306
int v = JavaUtils.parseJavaVersion(version);
315307
return forVersion(v, JavaUtils.isOpenVersion(version));
@@ -328,7 +320,7 @@ public static <T extends Jdk> Predicate<T> allTags(Set<String> tags) {
328320
}
329321

330322
public static <T extends InstalledJdk> Predicate<T> fixedVersion() {
331-
return InstalledJdk::isFixedVersion;
323+
return jdk -> jdk.provider().hasFixedVersions();
332324
}
333325

334326
public static <T extends InstalledJdk> Predicate<T> path(Path jdkPath) {

src/main/java/dev/jbang/devkitman/JdkInstaller.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.jbang.devkitman;
22

33
import java.nio.file.Path;
4-
import java.util.List;
4+
import java.util.stream.Stream;
55

66
import org.jspecify.annotations.NonNull;
77
import org.jspecify.annotations.Nullable;
@@ -23,7 +23,7 @@ public interface JdkInstaller {
2323
* @return List of <code>Jdk</code> objects
2424
*/
2525
@NonNull
26-
default List<Jdk.AvailableJdk> listAvailable() {
26+
default Stream<Jdk.AvailableJdk> listAvailable() {
2727
throw new UnsupportedOperationException(
2828
"Listing available JDKs is not supported by " + getClass().getName());
2929
}
@@ -38,7 +38,7 @@ default List<Jdk.AvailableJdk> listAvailable() {
3838
* @return A <code>Jdk</code> object or <code>null</code>
3939
*/
4040
default Jdk.@Nullable AvailableJdk getAvailableByVersion(int version, boolean openVersion) {
41-
return listAvailable().stream()
41+
return listAvailable()
4242
.filter(Jdk.Predicates.forVersion(version, openVersion))
4343
.findFirst()
4444
.orElse(null);
@@ -58,7 +58,7 @@ default List<Jdk.AvailableJdk> listAvailable() {
5858
* @return A <code>Jdk</code> object or <code>null</code>
5959
*/
6060
default Jdk.@Nullable AvailableJdk getAvailableByIdOrToken(String idOrToken) {
61-
return listAvailable().stream()
61+
return listAvailable()
6262
.filter(Jdk.Predicates.id(idOrToken))
6363
.findFirst()
6464
.orElse(null);

0 commit comments

Comments
 (0)