Skip to content

Commit 91536be

Browse files
authored
Merge pull request #31725 from ia3andy/check-min-java
Add check for extensions min Java
2 parents c06777d + 83efeb7 commit 91536be

File tree

5 files changed

+52
-18
lines changed

5 files changed

+52
-18
lines changed

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateProjectHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class CreateProjectHelper {
3434

3535
// ordering is important here, so let's keep them ordered
3636
public static final SortedSet<Integer> JAVA_VERSIONS_LTS = new TreeSet<>(List.of(11, 17));
37-
private static final int DEFAULT_JAVA_VERSION = 11;
37+
public static final int DEFAULT_JAVA_VERSION = 11;
3838
private static final int MAX_LTS_SUPPORTED_BY_KOTLIN = 17;
3939
public static final String DETECT_JAVA_RUNTIME_VERSION = "<<detect java runtime version>>";
4040
private static final Pattern JAVA_VERSION_PATTERN = Pattern.compile("(\\d+)(?:\\..*)?");

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateProjectCommandHandler.java

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
11
package io.quarkus.devtools.commands.handlers;
22

3-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.DATA;
4-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.EXAMPLE;
5-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.EXTENSIONS;
6-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.EXTRA_CODESTARTS;
7-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.NO_BUILDTOOL_WRAPPER;
8-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.NO_CODE;
9-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.NO_DOCKERFILES;
10-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.PACKAGE_NAME;
11-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.PROJECT_GROUP_ID;
12-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.QUARKUS_VERSION;
13-
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.RESOURCE_CLASS_NAME;
3+
import static io.quarkus.devtools.commands.CreateProject.CreateProjectKey.*;
144
import static io.quarkus.devtools.commands.handlers.CreateProjectCodestartDataConverter.toCodestartData;
155
import static io.quarkus.devtools.commands.handlers.QuarkusCommandHandlers.computeExtensionsFromQuery;
16-
import static io.quarkus.devtools.messagewriter.MessageIcons.ERROR_ICON;
6+
import static io.quarkus.platform.catalog.processor.ExtensionProcessor.getMinimumJavaVersion;
177

188
import java.io.IOException;
199
import java.util.ArrayList;
@@ -30,6 +20,7 @@
3020
import io.quarkus.devtools.codestarts.CodestartType;
3121
import io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartCatalog;
3222
import io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartProjectInput;
23+
import io.quarkus.devtools.commands.CreateProjectHelper;
3324
import io.quarkus.devtools.commands.data.QuarkusCommandException;
3425
import io.quarkus.devtools.commands.data.QuarkusCommandInvocation;
3526
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
@@ -74,15 +65,14 @@ public QuarkusCommandOutcome execute(QuarkusCommandInvocation invocation) throws
7465

7566
List<Extension> extensionsToAdd = computeRequiredExtensions(invocation.getExtensionsCatalog(), extensionsQuery,
7667
invocation.log());
77-
78-
ExtensionCatalog mainCatalog = invocation.getExtensionsCatalog(); // legacy platform initialization
7968
final List<ExtensionCatalog> extensionOrigins;
69+
ExtensionCatalog mainCatalog = invocation.getExtensionsCatalog(); // legacy platform initialization
70+
final String javaVersion = invocation.getStringValue(JAVA_VERSION);
8071
try {
72+
checkMinimumJavaVersion(javaVersion, extensionsToAdd);
8173
extensionOrigins = getExtensionOrigins(mainCatalog, extensionsToAdd);
8274
} catch (QuarkusCommandException e) {
83-
final StringBuilder buf = new StringBuilder();
84-
buf.append(ERROR_ICON).append(' ').append(e.getLocalizedMessage());
85-
invocation.log().info(buf.toString());
75+
invocation.log().error(e.getLocalizedMessage());
8676
return QuarkusCommandOutcome.failure();
8777
}
8878

@@ -244,4 +234,24 @@ private static void addOrigins(final List<ExtensionOrigins> extOrigins, Extensio
244234
extOrigins.add(eoBuilder.build());
245235
}
246236
}
237+
238+
private void checkMinimumJavaVersion(String javaVersionString, List<Extension> extensions) throws QuarkusCommandException {
239+
final List<Extension> incompatibleExtensions = new ArrayList<>();
240+
final int javaVersion = javaVersionString == null ? CreateProjectHelper.DEFAULT_JAVA_VERSION
241+
: Integer.parseInt(javaVersionString);
242+
for (Extension extension : extensions) {
243+
Integer extMinJavaVersion = getMinimumJavaVersion(extension);
244+
if (extMinJavaVersion != null
245+
&& javaVersion < extMinJavaVersion) {
246+
incompatibleExtensions.add(extension);
247+
}
248+
}
249+
if (!incompatibleExtensions.isEmpty()) {
250+
final String list = incompatibleExtensions.stream()
251+
.map(e -> String.format("- %s (min: %s)", e.managementKey(), getMinimumJavaVersion(e)))
252+
.collect(Collectors.joining("\n "));
253+
throw new QuarkusCommandException(String
254+
.format("Some extensions are not compatible with the selected Java version (%s):\n %s", javaVersion, list));
255+
}
256+
}
247257
}

independent-projects/tools/devtools-common/src/main/java/io/quarkus/platform/catalog/processor/ExtensionProcessor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public static String getGuide(Extension extension) {
5050
return getMetadataValue(extension, MD_GUIDE).asString();
5151
}
5252

53+
public static Integer getMinimumJavaVersion(Extension extension) {
54+
return getMetadataValue(extension, MD_MINIMUM_JAVA_VERSION).asInteger();
55+
}
56+
5357
public static List<String> getCategories(Extension extension) {
5458
return getMetadataValue(extension, MD_CATEGORIES).asStringList();
5559
}
@@ -200,6 +204,10 @@ public List<String> getKeywords() {
200204
return getKeywords(extension);
201205
}
202206

207+
public Integer getMinimumJavaVersion() {
208+
return getMinimumJavaVersion(extension);
209+
}
210+
203211
/**
204212
* List of strings to use for matching.
205213
* <br/>

independent-projects/tools/devtools-common/src/main/java/io/quarkus/platform/catalog/processor/MetadataValue.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,20 @@ public String asString() {
3838
return null;
3939
}
4040

41+
public Integer asInteger() {
42+
if (val instanceof String) {
43+
try {
44+
return Integer.parseInt((String) val);
45+
} catch (NumberFormatException e) {
46+
return null;
47+
}
48+
}
49+
if (val instanceof Integer) {
50+
return (Integer) val;
51+
}
52+
return null;
53+
}
54+
4155
@SuppressWarnings("unchecked")
4256
public List<String> asStringList() {
4357
if (val instanceof String) {

independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/catalog/Extension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public interface Extension {
1717
String MD_NESTED_CODESTART_ARTIFACT = "codestart.artifact";
1818

1919
String MD_GUIDE = "guide";
20+
21+
String MD_MINIMUM_JAVA_VERSION = "minimum-java-version";
2022
String MD_KEYWORDS = "keywords";
2123
String MD_UNLISTED = "unlisted";
2224
String MD_CATEGORIES = "categories";

0 commit comments

Comments
 (0)