Skip to content

Commit

Permalink
Provide the ability to define extension Java version on creation
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet committed Nov 15, 2023
1 parent 4ed7e29 commit 53a7e5f
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 9 deletions.
16 changes: 16 additions & 0 deletions devtools/cli/src/main/java/io/quarkus/cli/CreateExtension.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.quarkus.cli;

import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
Expand All @@ -13,6 +15,7 @@
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
import io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.devtools.project.JavaVersion;
import io.quarkus.devtools.project.QuarkusProject;
import io.quarkus.maven.dependency.ArtifactCoords;
import io.quarkus.registry.catalog.ExtensionCatalog;
Expand Down Expand Up @@ -68,6 +71,12 @@
})
public class CreateExtension extends BaseCreateCommand {

static class VersionCandidates extends ArrayList<String> {
VersionCandidates() {
super(JavaVersion.JAVA_VERSIONS_LTS.stream().map(String::valueOf).collect(Collectors.toList()));
}
}

@CommandLine.Spec
protected CommandLine.Model.CommandSpec spec;

Expand All @@ -77,6 +86,12 @@ public class CreateExtension extends BaseCreateCommand {
@CommandLine.ArgGroup(order = 1, heading = "%nQuarkus version:%n")
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

// Ideally we should use TargetLanguageGroup once we support creating extensions with Kotlin
@CommandLine.Option(names = {
"--java" }, description = "Target Java version.\n Valid values: ${COMPLETION-CANDIDATES}", completionCandidates = VersionCandidates.class,
defaultValue = JavaVersion.DEFAULT_JAVA_VERSION_FOR_EXTENSION)
String javaVersion;

@CommandLine.ArgGroup(order = 2, exclusive = false, heading = "%nGenerated artifacts%n")
ExtensionNameGenerationGroup nameGeneration = new ExtensionNameGenerationGroup();

Expand Down Expand Up @@ -117,6 +132,7 @@ public Integer call() throws Exception {
.quarkusBomGroupId(quarkusBom.getGroupId())
.quarkusBomArtifactId(quarkusBom.getArtifactId())
.quarkusBomVersion(quarkusBom.getVersion())
.javaVersion(javaVersion)
.withCodestart(codeGeneration.withCodestart())
.withoutUnitTest(codeGeneration.skipUnitTest())
.withoutDevModeTest(codeGeneration.skipDevModeTest())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@ public class CreateExtensionMojo extends AbstractMojo {
@Parameter(property = "quarkusBomVersion")
String quarkusBomVersion;

/**
* Version of Java used to build the project.
*/
@Parameter(property = "javaVersion")
private String javaVersion;

/**
* Indicates whether to generate an extension codestart
*/
Expand Down Expand Up @@ -281,7 +287,8 @@ public void execute() throws MojoExecutionException {
.quarkusVersion(quarkusVersion)
.quarkusBomGroupId(quarkusBomGroupId)
.quarkusBomArtifactId(quarkusBomArtifactId)
.quarkusBomGroupId(quarkusBomVersion)
.quarkusBomVersion(quarkusBomVersion)
.javaVersion(javaVersion)
.withCodestart(withCodestart)
.withoutUnitTest(withoutTests || withoutUnitTest)
.withoutDevModeTest(withoutTests || withoutDevModeTest)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ public class CreateProjectMojo extends AbstractMojo {
@Parameter(property = "platformVersion", required = false)
private String bomVersion;

/**
* Version of Java used to build the project.
*/
@Parameter(property = "javaVersion")
private String javaVersion;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.release>11</maven.compiler.release>
<maven.compiler.release>{java.version}</maven.compiler.release>
{#if quarkus.version}<quarkus.version>{quarkus.version}</quarkus.version>{/if}
{#if maven.compiler-plugin-version}<compiler-plugin.version>{maven.compiler-plugin-version}</compiler-plugin.version>{/if}
{#if maven.surefire-plugin.version}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ jobs:
if: startsWith(matrix.os, 'windows')

- uses: actions/checkout@v3
- name: Set up JDK 11
- name: Set up JDK {java.version}
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11
java-version: {java.version}
cache: 'maven'

- name: Build with Maven
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
env:
ECOSYSTEM_CI_REPO: quarkusio/quarkus-ecosystem-ci
ECOSYSTEM_CI_REPO_FILE: context.yaml
JAVA_VERSION: 11
JAVA_VERSION: {java.version}

#########################
# Repo specific setting #
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ jobs:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}

- name: Set up JDK 11
- name: Set up JDK {java.version}
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11
java-version: {java.version}
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
Expand All @@ -54,7 +54,7 @@ jobs:
- name: Update latest release version in docs
run: |
mvn -B -ntp -pl docs -am generate-resources -Denforcer.skip -Dformatter.skip -Dimpsort.skip
mvn -B -ntp -pl docs -am package -DskipTests -DskipITs -Denforcer.skip -Dformatter.skip -Dimpsort.skip
if ! git diff --quiet docs/modules/ROOT/pages/includes/attributes.adoc; then
git add docs/modules/ROOT/pages/includes/attributes.adoc
git commit -m "Update the latest release version ${{steps.metadata.outputs.current-version}} in documentation"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public enum QuarkusExtensionData implements DataKey {
QUARKUS_BOM_GROUP_ID("quarkus.bom.group-id"),
QUARKUS_BOM_ARTIFACT_ID("quarkus.bom.artifact-id"),
QUARKUS_BOM_VERSION("quarkus.bom.version"),
JAVA_VERSION("java.version"),
PROPERTIES_FROM_PARENT("properties.from-parent"),
PARENT_GROUP_ID("parent.group-id"),
PARENT_ARTIFACT_ID("parent.artifact-id"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,36 @@
package io.quarkus.devtools.commands;

import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.*;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.CLASS_NAME_BASE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_DESCRIPTION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_FULL_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_GUIDE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.HAS_DOCS_MODULE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_RELATIVE_PATH;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.JAVA_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_COMPILER_PLUGIN_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_QUARKUS_EXTENSION_PLUGIN;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_SUREFIRE_PLUGIN_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.NAMESPACE_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.NAMESPACE_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PACKAGE_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_RELATIVE_PATH;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PROPERTIES_FROM_PARENT;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.VERSION;
import static io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler.readPom;
import static io.quarkus.devtools.project.JavaVersion.computeJavaVersion;
import static java.util.Objects.requireNonNull;
import static org.apache.commons.lang3.StringUtils.isEmpty;

Expand Down Expand Up @@ -29,6 +58,8 @@
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
import io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler;
import io.quarkus.devtools.messagewriter.MessageWriter;
import io.quarkus.devtools.project.JavaVersion;
import io.quarkus.devtools.project.SourceType;
import io.quarkus.maven.utilities.MojoUtils;

/**
Expand Down Expand Up @@ -73,6 +104,7 @@ public enum LayoutType {
private String bomRelativeDir = "bom/application";
private String extensionsRelativeDir = "extensions";
private boolean withCodestart;
private String javaVersion;

public CreateExtension(final Path baseDir) {
this.baseDir = requireNonNull(baseDir, "extensionDirPath is required");
Expand Down Expand Up @@ -165,6 +197,11 @@ public CreateExtension quarkusBomVersion(String quarkusBomVersion) {
return this;
}

public CreateExtension javaVersion(String javaVersion) {
this.javaVersion = javaVersion;
return this;
}

public CreateExtension withCodestart(boolean withCodestart) {
this.withCodestart = withCodestart;
return this;
Expand Down Expand Up @@ -227,6 +264,10 @@ public CreateExtensionCommandHandler prepare() throws QuarkusCommandException {
data.put(EXTENSION_FULL_NAME,
data.getRequiredStringValue(NAMESPACE_NAME) + data.getRequiredStringValue(EXTENSION_NAME));

// for now, we only support Java extensions
data.put(JAVA_VERSION, javaVersion == null ? JavaVersion.DEFAULT_JAVA_VERSION_FOR_EXTENSION
: computeJavaVersion(SourceType.JAVA, javaVersion));

final String runtimeArtifactId = getRuntimeArtifactIdFromData();

ensureRequiredStringData(GROUP_ID, resolveGroupId(baseModel));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ public String toString() {
// ordering is important here, so let's keep them ordered
public static final SortedSet<Integer> JAVA_VERSIONS_LTS = new TreeSet<>(List.of(11, 17, 21));
public static final int DEFAULT_JAVA_VERSION = 11;
// we want to maximize the compatibility of extensions with the Quarkus ecosystem so let's stick to 11 by default
public static final String DEFAULT_JAVA_VERSION_FOR_EXTENSION = "11";
public static final int MAX_LTS_SUPPORTED_BY_KOTLIN = 17;
public static final String DETECT_JAVA_RUNTIME_VERSION = "<<detect java runtime version>>";
public static final Pattern JAVA_VERSION_PATTERN = Pattern.compile("(\\d+)(?:\\..*)?");
Expand Down

0 comments on commit 53a7e5f

Please sign in to comment.