-
-
-
-
diff --git a/devtools/pom.xml b/devtools/pom.xml
index ec3cd0a47327e8..236312274469c6 100644
--- a/devtools/pom.xml
+++ b/devtools/pom.xml
@@ -20,10 +20,10 @@
+ project-core-extension-codestartsplatform-descriptor-json-pluginplatform-propertiesbom-descriptor-json
- platform-descriptor-jsonmavengradlecli
diff --git a/devtools/platform-descriptor-json/pom.xml b/devtools/project-core-extension-codestarts/pom.xml
similarity index 52%
rename from devtools/platform-descriptor-json/pom.xml
rename to devtools/project-core-extension-codestarts/pom.xml
index 269ae990b3ab77..ae731ad5282d55 100644
--- a/devtools/platform-descriptor-json/pom.xml
+++ b/devtools/project-core-extension-codestarts/pom.xml
@@ -10,8 +10,8 @@
999-SNAPSHOT
- quarkus-platform-descriptor-json
- Quarkus - Dev tools - Platform Descriptor - JSON
+ quarkus-project-core-extension-codestarts
+ Quarkus - Dev tools - Project Core Extension Codestarts${project.basedir}/../gradle
@@ -29,48 +29,6 @@
-
- maven-dependency-plugin
-
-
- copy-bom
-
- copy
-
-
-
-
- io.quarkus
- quarkus-bom
- ${project.version}
- pom
- ${project.build.outputDirectory}/quarkus-bom
- pom.xml
-
-
-
-
-
- copy-bom-descriptor-json
-
- copy
-
-
-
-
- io.quarkus
- quarkus-bom-quarkus-platform-descriptor
- ${project.version}
- json
- ${project.version}
- ${project.build.outputDirectory}/quarkus-bom-descriptor
- extensions.json
-
-
-
-
-
- org.codehaus.mojoexec-maven-plugin
@@ -104,16 +62,6 @@
-
-
- io.quarkus
- quarkus-bom-quarkus-platform-descriptor
- ${project.version}
- json
- ${project.version}
-
-
-
windows
diff --git a/devtools/platform-descriptor-json/src/main/filtered/quarkus.properties b/devtools/project-core-extension-codestarts/src/main/filtered/quarkus.properties
similarity index 94%
rename from devtools/platform-descriptor-json/src/main/filtered/quarkus.properties
rename to devtools/project-core-extension-codestarts/src/main/filtered/quarkus.properties
index 2c025575f58270..ef62a1553940f0 100644
--- a/devtools/platform-descriptor-json/src/main/filtered/quarkus.properties
+++ b/devtools/project-core-extension-codestarts/src/main/filtered/quarkus.properties
@@ -23,4 +23,4 @@ supported-maven-versions=${supported-maven-versions}
# the proposed version must be in the range of the supported versions
proposed-maven-version=${proposed-maven-version}
maven-wrapper-version=${maven-wrapper.version}
-gradle-wrapper-version=${gradle-wrapper.version}
+gradle-wrapper-version=${gradle-wrapper.version}
\ No newline at end of file
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/java/src/{command.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/java/src/{command.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/java/src/{command.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-picocli-code/java/src/{command.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/java/src/{resource.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/java/src/{resource.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/java/src/{resource.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/code/jbang-resteasy-code/java/src/{resource.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/language/java/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/language/java/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/language/java/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/language/java/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/..gitignore b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/..gitignore
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/..gitignore
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/..gitignore
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/project/quarkus-jbang/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang.cmd b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang.cmd
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang.cmd
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/base/jbang.cmd
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus-jbang/tooling/jbang-wrapper/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/..gitignore b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/..gitignore
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/..gitignore
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/..gitignore
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/build-layout.include.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/build-layout.include.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/build-layout.include.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/build-layout.include.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/gradle.tpl.qute.properties b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/gradle.tpl.qute.properties
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/gradle.tpl.qute.properties
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/gradle.tpl.qute.properties
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/settings.tpl.qute.gradle.kts b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/settings.tpl.qute.gradle.kts
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/settings.tpl.qute.gradle.kts
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/base/settings.tpl.qute.gradle.kts
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/java/build.tpl.qute.gradle.kts b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/java/build.tpl.qute.gradle.kts
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/java/build.tpl.qute.gradle.kts
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/java/build.tpl.qute.gradle.kts
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/kotlin/build.tpl.qute.gradle.kts b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/kotlin/build.tpl.qute.gradle.kts
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/kotlin/build.tpl.qute.gradle.kts
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/kotlin/build.tpl.qute.gradle.kts
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/scala/build.tpl.qute.gradle.kts b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/scala/build.tpl.qute.gradle.kts
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/scala/build.tpl.qute.gradle.kts
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle-kotlin-dsl/scala/build.tpl.qute.gradle.kts
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/..gitignore b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/..gitignore
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/..gitignore
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/..gitignore
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/build-layout.include.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/build-layout.include.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/build-layout.include.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/build-layout.include.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/gradle.tpl.qute.properties b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/gradle.tpl.qute.properties
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/gradle.tpl.qute.properties
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/gradle.tpl.qute.properties
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/settings.tpl.qute.gradle b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/settings.tpl.qute.gradle
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/settings.tpl.qute.gradle
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/base/settings.tpl.qute.gradle
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/java/build.tpl.qute.gradle b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/java/build.tpl.qute.gradle
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/java/build.tpl.qute.gradle
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/java/build.tpl.qute.gradle
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/kotlin/build.tpl.qute.gradle b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/kotlin/build.tpl.qute.gradle
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/kotlin/build.tpl.qute.gradle
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/kotlin/build.tpl.qute.gradle
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/scala/build.tpl.qute.gradle b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/scala/build.tpl.qute.gradle
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/gradle/scala/build.tpl.qute.gradle
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/gradle/scala/build.tpl.qute.gradle
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/..gitignore b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/..gitignore
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/..gitignore
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/..gitignore
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/pom.tpl.qute.xml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/pom.tpl.qute.xml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/pom.tpl.qute.xml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/base/pom.tpl.qute.xml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/java/.gitkeep b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/java/.gitkeep
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/java/.gitkeep
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/java/.gitkeep
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/kotlin/pom.tpl.qute.xml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/kotlin/pom.tpl.qute.xml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/kotlin/pom.tpl.qute.xml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/kotlin/pom.tpl.qute.xml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/scala/pom.tpl.qute.xml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/scala/pom.tpl.qute.xml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/buildtool/maven/scala/pom.tpl.qute.xml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/buildtool/maven/scala/pom.tpl.qute.xml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/config/properties/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/config/properties/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/config/properties/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/config/properties/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/config/yaml/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/config/yaml/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/config/yaml/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/config/yaml/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/java/src/main/java/org/acme/{main.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/java/src/main/java/org/acme/{main.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/java/src/main/java/org/acme/{main.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/java/src/main/java/org/acme/{main.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/kotlin/src/main/kotlin/org/acme/{main.class-name}.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/kotlin/src/main/kotlin/org/acme/{main.class-name}.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/kotlin/src/main/kotlin/org/acme/{main.class-name}.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/commandmode-example/kotlin/src/main/kotlin/org/acme/{main.class-name}.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/resteasy-reactive-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/main/java/org/acme/{resource.class-name}.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/native-test/java/org/acme/Native{resource.class-name}IT.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/java/src/test/java/org/acme/{resource.class-name}Test.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/main/kotlin/org/acme/{resource.class-name}.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/native-test/kotlin/org/acme/Native{resource.class-name}IT.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/kotlin/src/test/kotlin/org/acme/{resource.class-name}Test.tpl.qute.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/main/scala/org/acme/{resource.class-name}.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/native-test/scala/org/acme/Native{resource.class-name}IT.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/examples/spring-web-example/scala/src/test/scala/org/acme/{resource.class-name}Test.tpl.qute.scala
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/java/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/java/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/java/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/java/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/kotlin/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/kotlin/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/kotlin/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/kotlin/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/scala/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/scala/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/language/scala/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/language/scala/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/..gitignore b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/..gitignore
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/..gitignore
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/..gitignore
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/index-entry.include.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/index-entry.include.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/index-entry.include.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/index-entry.include.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/readme-header.include.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/readme-header.include.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/readme-header.include.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/readme-header.include.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/META-INF/resources/index.tpl.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/META-INF/resources/index.tpl.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/META-INF/resources/index.tpl.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/META-INF/resources/index.tpl.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/application.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/application.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/application.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/base/src/main/resources/application.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/java/src/main/java/.gitkeep b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/java/src/main/java/.gitkeep
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/java/src/main/java/.gitkeep
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/java/src/main/java/.gitkeep
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/kotlin/src/main/kotlin/.gitkeep b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/kotlin/src/main/kotlin/.gitkeep
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/kotlin/src/main/kotlin/.gitkeep
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/kotlin/src/main/kotlin/.gitkeep
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/scala/src/main/scala/.gitkeep b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/scala/src/main/scala/.gitkeep
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/project/quarkus/scala/src/main/scala/.gitkeep
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/project/quarkus/scala/src/main/scala/.gitkeep
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/.dockerignore.tpl.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/.dockerignore.tpl.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/.dockerignore.tpl.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/.dockerignore.tpl.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/Dockerfile-layout.include.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/Dockerfile-layout.include.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/Dockerfile-layout.include.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/Dockerfile-layout.include.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.jvm
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.legacy-jar
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-distroless b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-distroless
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-distroless
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/base/src/main/docker/Dockerfile.tpl.qute.native-distroless
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/dockerfiles/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/github-action/base/.github/workflows/ci.tpl.qute.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/github-action/base/.github/workflows/ci.tpl.qute.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/github-action/base/.github/workflows/ci.tpl.qute.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/github-action/base/.github/workflows/ci.tpl.qute.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/github-action/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/github-action/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/github-action/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/github-action/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.jar b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.jar
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.jar
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.tpl.qute.properties b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.tpl.qute.properties
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.tpl.qute.properties
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradle/wrapper/gradle-wrapper.tpl.qute.properties
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew.bat b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew.bat
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew.bat
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/base/gradlew.bat
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/gradle-wrapper/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/MavenWrapperDownloader.tpl.qute.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/MavenWrapperDownloader.tpl.qute.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/MavenWrapperDownloader.tpl.qute.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/MavenWrapperDownloader.tpl.qute.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/maven-wrapper.tpl.qute.properties b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/maven-wrapper.tpl.qute.properties
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/maven-wrapper.tpl.qute.properties
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/.mvn/wrapper/maven-wrapper.tpl.qute.properties
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute.cmd b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute.cmd
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute.cmd
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/base/mvnw.tpl.qute.cmd
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/core/tooling/maven-wrapper/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/application.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/application.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/application.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/base/src/main/resources/application.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/java/src/main/java/org/acme/config/ConfigResource.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/java/src/main/java/org/acme/config/ConfigResource.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/java/src/main/java/org/acme/config/ConfigResource.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/java/src/main/java/org/acme/config/ConfigResource.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/kotlin/src/main/kotlin/org/acme/config/ConfigResource.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/kotlin/src/main/kotlin/org/acme/config/ConfigResource.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/config-example/kotlin/src/main/kotlin/org/acme/config/ConfigResource.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/config-example/kotlin/src/main/kotlin/org/acme/config/ConfigResource.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/main/java/org/acme/funqy/Funqy.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/main/java/org/acme/funqy/Funqy.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/main/java/org/acme/funqy/Funqy.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/main/java/org/acme/funqy/Funqy.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/test/java/org/acme/funqy/FunqyTest.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/test/java/org/acme/funqy/FunqyTest.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/test/java/org/acme/funqy/FunqyTest.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/funqy-http-example/java/src/test/java/org/acme/funqy/FunqyTest.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/application.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/application.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/application.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/base/src/main/resources/application.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/java/src/main/java/org/acme/logging/json/LoggingJsonResource.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/java/src/main/java/org/acme/logging/json/LoggingJsonResource.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/java/src/main/java/org/acme/logging/json/LoggingJsonResource.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/java/src/main/java/org/acme/logging/json/LoggingJsonResource.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/kotlin/src/main/kotlin/org/acme/logging/json/LoggingJsonResource.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/kotlin/src/main/kotlin/org/acme/logging/json/LoggingJsonResource.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/logging-json/kotlin/src/main/kotlin/org/acme/logging/json/LoggingJsonResource.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/logging-json/kotlin/src/main/kotlin/org/acme/logging/json/LoggingJsonResource.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/EntryCommand.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/EntryCommand.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/EntryCommand.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/EntryCommand.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GoodbyeCommand.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GoodbyeCommand.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GoodbyeCommand.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GoodbyeCommand.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GreetingService.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GreetingService.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GreetingService.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/GreetingService.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/HelloCommand.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/HelloCommand.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/HelloCommand.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/java/src/main/java/org/acme/picocli/HelloCommand.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/EntryCommand.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/EntryCommand.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/EntryCommand.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/EntryCommand.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GoodbyeCommand.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GoodbyeCommand.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GoodbyeCommand.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GoodbyeCommand.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GreetingService.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GreetingService.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GreetingService.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/GreetingService.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/HelloCommand.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/HelloCommand.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/HelloCommand.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/picocli-example/kotlin/src/main/kotlin/org/acme/picocli/HelloCommand.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/JacksonResource.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/JacksonResource.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/JacksonResource.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/JacksonResource.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/MyObjectMapperCustomizer.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/MyObjectMapperCustomizer.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/MyObjectMapperCustomizer.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/java/src/main/java/org/acme/resteasyjackson/MyObjectMapperCustomizer.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/JacksonResource.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/JacksonResource.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/JacksonResource.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/JacksonResource.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/MyObjectMapperCustomizer.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/MyObjectMapperCustomizer.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/MyObjectMapperCustomizer.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-jackson-example/kotlin/src/main/kotlin/org/acme/resteasyjackson/MyObjectMapperCustomizer.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/templates/page.qute.tpl.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/templates/page.qute.tpl.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/templates/page.qute.tpl.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/base/src/main/resources/templates/page.qute.tpl.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/Quark.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/Quark.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/Quark.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/Quark.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/QuteResource.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/QuteResource.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/QuteResource.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/java/src/main/java/org/acme/resteasyqute/QuteResource.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/Quark.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/Quark.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/Quark.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/Quark.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/QuteResource.kt b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/QuteResource.kt
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/QuteResource.kt
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/resteasy-qute-example/kotlin/src/main/kotlin/org/acme/resteasyqute/QuteResource.kt
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/src/main/resources/META-INF/resources/index.entry.qute.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/base/src/main/resources/META-INF/resources/index.entry.qute.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/java/org/acme/undertowwebsockets/SupersonicChatSocket.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/java/org/acme/undertowwebsockets/SupersonicChatSocket.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/java/org/acme/undertowwebsockets/SupersonicChatSocket.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/java/org/acme/undertowwebsockets/SupersonicChatSocket.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/resources/META-INF/resources/supersonic-chat.html b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/resources/META-INF/resources/supersonic-chat.html
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/resources/META-INF/resources/supersonic-chat.html
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/main/resources/META-INF/resources/supersonic-chat.html
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/test/java/org/acme/undertowwebsockets/SupersonicChatSocketTest.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/test/java/org/acme/undertowwebsockets/SupersonicChatSocketTest.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/test/java/org/acme/undertowwebsockets/SupersonicChatSocketTest.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/examples/undertow-websockets-example/java/src/test/java/org/acme/undertowwebsockets/SupersonicChatSocketTest.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/payload.json b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/payload.json
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/payload.json
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/payload.json
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/GreetingLambda.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/GreetingLambda.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/GreetingLambda.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/GreetingLambda.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/Person.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/Person.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/Person.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/main/java/org/acme/lambda/Person.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/native-test/java/org/acme/lambda/LambdaHandlerTestIT.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/native-test/java/org/acme/lambda/LambdaHandlerTestIT.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/native-test/java/org/acme/lambda/LambdaHandlerTestIT.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/native-test/java/org/acme/lambda/LambdaHandlerTestIT.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/java/org/acme/lambda/LambdaHandlerTest.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/java/org/acme/lambda/LambdaHandlerTest.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/java/org/acme/lambda/LambdaHandlerTest.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/java/org/acme/lambda/LambdaHandlerTest.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/resources/application.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/resources/application.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/resources/application.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/amazon-lambda-example/java/src/test/resources/application.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/function.tpl.qute.json b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/function.tpl.qute.json
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/function.tpl.qute.json
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/function.tpl.qute.json
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/host.json b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/host.json
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/host.json
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/host.json
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/local.settings.json b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/local.settings.json
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/local.settings.json
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/azure-config/local.settings.json
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/pom.tpl.qute.xml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/pom.tpl.qute.xml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/pom.tpl.qute.xml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/pom.tpl.qute.xml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/src/main/resources/application.tpl.qute.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/src/main/resources/application.tpl.qute.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/src/main/resources/application.tpl.qute.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/base/src/main/resources/application.tpl.qute.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/azure-functions-http-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/payload.json b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/payload.json
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/payload.json
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/payload.json
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/GreetingFunction.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/GreetingFunction.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/GreetingFunction.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/GreetingFunction.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/Person.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/Person.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/Person.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/main/java/org/acme/funqy/Person.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/org/acme/funqy/FunqyIT.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/resources/application.properties b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/resources/application.properties
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/resources/application.properties
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/native-test/java/resources/application.properties
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/java/org/acme/funqy/FunqyTest.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/java/org/acme/funqy/FunqyTest.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/java/org/acme/funqy/FunqyTest.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/java/org/acme/funqy/FunqyTest.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/resources/application.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/resources/application.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/resources/application.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-amazon-lambda-example/java/src/test/resources/application.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingFunctions.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingFunctions.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingFunctions.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingFunctions.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingService.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingService.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingService.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-google-cloud-functions-example/java/src/main/java/org/acme/funqygooglecloudfunctions/GreetingService.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/CloudEventGreeting.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/CloudEventGreeting.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/CloudEventGreeting.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/CloudEventGreeting.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/Person.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/Person.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/Person.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/java/org/acme/funqy/cloudevent/Person.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-service.tpl.qute.yaml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-service.tpl.qute.yaml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-service.tpl.qute.yaml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-service.tpl.qute.yaml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-trigger.tpl.qute.yaml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-trigger.tpl.qute.yaml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-trigger.tpl.qute.yaml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/main/k8s/funqy-trigger.tpl.qute.yaml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/native-test/java/org/acme/funqy/cloudevent/FunqyIT.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/native-test/java/org/acme/funqy/cloudevent/FunqyIT.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/native-test/java/org/acme/funqy/cloudevent/FunqyIT.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/native-test/java/org/acme/funqy/cloudevent/FunqyIT.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/test/java/org/acme/funqy/cloudevent/FunqyTest.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/test/java/org/acme/funqy/cloudevent/FunqyTest.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/test/java/org/acme/funqy/cloudevent/FunqyTest.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/funqy-knative-events-example/java/src/test/java/org/acme/funqy/cloudevent/FunqyTest.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldBackgroundFunction.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldBackgroundFunction.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldBackgroundFunction.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldBackgroundFunction.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldHttpFunction.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldHttpFunction.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldHttpFunction.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-example/java/src/main/java/org/acme/googlecloudfunctions/HelloWorldHttpFunction.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/base/README.tpl.qute.md b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/base/README.tpl.qute.md
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/base/README.tpl.qute.md
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/base/README.tpl.qute.md
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/codestart.yml b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/codestart.yml
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/codestart.yml
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/codestart.yml
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingFunqy.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingFunqy.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingFunqy.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingFunqy.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingResource.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingResource.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingResource.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingResource.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingRoutes.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingRoutes.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingRoutes.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingRoutes.java
diff --git a/devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingServlet.java b/devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingServlet.java
similarity index 100%
rename from devtools/platform-descriptor-json/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingServlet.java
rename to devtools/project-core-extension-codestarts/src/main/resources/codestarts/quarkus/singleton-examples/google-cloud-functions-http-example/java/src/main/java/org/acme/googlecloudfunctions/GreetingServlet.java
diff --git a/docs/pom.xml b/docs/pom.xml
index fabc2a5f77a649..9f8cb2957af0cd 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -253,6 +253,19 @@
+
+ io.quarkus
+ quarkus-apache-httpclient-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-arc-deployment
@@ -1176,6 +1189,19 @@
+
+ io.quarkus
+ quarkus-kubernetes-client-internal-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-kubernetes-config-deployment
@@ -1540,6 +1566,32 @@
+
+ io.quarkus
+ quarkus-opentelemetry-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+ io.quarkus
+ quarkus-opentelemetry-exporter-jaeger-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-picocli-deployment
@@ -1735,6 +1787,19 @@
+
+ io.quarkus
+ quarkus-rest-client-reactive-jackson-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-resteasy-deployment
@@ -1891,6 +1956,19 @@
+
+ io.quarkus
+ quarkus-resteasy-reactive-jackson-common-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-resteasy-reactive-jsonb-deployment
@@ -1904,6 +1982,19 @@
+
+ io.quarkus
+ quarkus-resteasy-reactive-links-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+ io.quarkusquarkus-resteasy-reactive-qute-deployment
diff --git a/docs/src/main/asciidoc/amazon-dynamodb.adoc b/docs/src/main/asciidoc/amazon-dynamodb.adoc
index 236d9504d433a0..a0767268d91c8b 100644
--- a/docs/src/main/asciidoc/amazon-dynamodb.adoc
+++ b/docs/src/main/asciidoc/amazon-dynamodb.adoc
@@ -341,6 +341,10 @@ And add following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
If you're going to use a local DynamoDB instance, configure it as follows:
diff --git a/docs/src/main/asciidoc/amazon-kms.adoc b/docs/src/main/asciidoc/amazon-kms.adoc
index 1cb3f0a8f37aec..27a1190d7d93ec 100644
--- a/docs/src/main/asciidoc/amazon-kms.adoc
+++ b/docs/src/main/asciidoc/amazon-kms.adoc
@@ -186,6 +186,10 @@ And add the following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
If you're going to use a local KMS instance, configure it as follows:
diff --git a/docs/src/main/asciidoc/amazon-s3.adoc b/docs/src/main/asciidoc/amazon-s3.adoc
index c7f313dd637ade..5226e32b18471c 100644
--- a/docs/src/main/asciidoc/amazon-s3.adoc
+++ b/docs/src/main/asciidoc/amazon-s3.adoc
@@ -372,6 +372,10 @@ And add following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
For asynchronous client refer to <> for more information.
diff --git a/docs/src/main/asciidoc/amazon-ses.adoc b/docs/src/main/asciidoc/amazon-ses.adoc
index 3d99ed022ef45c..163af2c6383ab4 100644
--- a/docs/src/main/asciidoc/amazon-ses.adoc
+++ b/docs/src/main/asciidoc/amazon-ses.adoc
@@ -178,6 +178,10 @@ And add the following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
If you're going to use a local SES instance, configure it as follows:
diff --git a/docs/src/main/asciidoc/amazon-sns.adoc b/docs/src/main/asciidoc/amazon-sns.adoc
index c4bfbd6931c7a8..20e48bea505342 100644
--- a/docs/src/main/asciidoc/amazon-sns.adoc
+++ b/docs/src/main/asciidoc/amazon-sns.adoc
@@ -611,6 +611,10 @@ And add the following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
If you're going to use a local SNS instance, configure it as follows:
diff --git a/docs/src/main/asciidoc/amazon-sqs.adoc b/docs/src/main/asciidoc/amazon-sqs.adoc
index 2be94580abc44b..7edb5b12726db4 100644
--- a/docs/src/main/asciidoc/amazon-sqs.adoc
+++ b/docs/src/main/asciidoc/amazon-sqs.adoc
@@ -293,6 +293,10 @@ And add the following dependency to the application `pom.xml`:
software.amazon.awssdkapache-client
+
+ io.quarkus
+ quarkus-apache-httpclient
+
----
If you're going to use a local SQS instance, configure it as follows:
diff --git a/docs/src/main/asciidoc/amqp.adoc b/docs/src/main/asciidoc/amqp.adoc
index 804ae4b19a49ce..071272d460f8a0 100644
--- a/docs/src/main/asciidoc/amqp.adoc
+++ b/docs/src/main/asciidoc/amqp.adoc
@@ -8,7 +8,7 @@ https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
include::./attributes.adoc[]
-This guide demonstrates how your Quarkus application can utilize MicroProfile Reactive Messaging to interact with AMQP.
+This guide demonstrates how your Quarkus application can utilize SmallRye Reactive Messaging to interact with AMQP.
include::./status-include.adoc[]
@@ -357,7 +357,7 @@ The new `Emitter.send` method returns a `CompletionStage` completed when the pro
== Going further
This guide has shown how you can interact with AMQP using Quarkus.
-It utilizes MicroProfile Reactive Messaging to build data streaming applications.
+It utilizes SmallRye Reactive Messaging to build data streaming applications.
If you did the Kafka quickstart, you have realized that it's the same code.
The only difference is the connector configuration.
diff --git a/docs/src/main/asciidoc/building-native-image.adoc b/docs/src/main/asciidoc/building-native-image.adoc
index 9d550738ae7c5c..aaf137710f5ab3 100644
--- a/docs/src/main/asciidoc/building-native-image.adoc
+++ b/docs/src/main/asciidoc/building-native-image.adoc
@@ -494,7 +494,7 @@ And finally, run it with:
docker run -i --rm -p 8080:8080 quarkus-quickstart/getting-started
----
-NOTE: If you are interested in tiny Docker images, check the {quarkus-images-url}/master/distroless[distroless] version.
+NOTE: If you are interested in tiny Docker images, check the {quarkus-images-url}/main/distroless[distroless] version.
=== Using a multi-stage Docker build
@@ -540,7 +540,7 @@ Sample Dockerfile for building with Gradle:
[source,dockerfile,subs=attributes+]
----
## Stage 1 : build with maven builder image with native capabilities
-FROM quay.io/quarkus/centos-quarkus-maven:{graalvm-version}-java8 AS build
+FROM quay.io/quarkus/centos-quarkus-maven:{graalvm-flavor} AS build
COPY src /usr/src/app/src
COPY build.gradle /usr/src/app
COPY settings.gradle /usr/src/app
diff --git a/docs/src/main/asciidoc/cassandra.adoc b/docs/src/main/asciidoc/cassandra.adoc
index dddcc695b8aaa6..b9dcfe75c4d63e 100644
--- a/docs/src/main/asciidoc/cassandra.adoc
+++ b/docs/src/main/asciidoc/cassandra.adoc
@@ -17,95 +17,93 @@ include::./platform-include.adoc[]
== Prerequisites
-To complete this guide, you need:
-
-* an IDE
-* JDK 1.8+ installed with `JAVA_HOME` configured appropriately
-* GraalVM installed with `GRAALVM_HOME` configured appropriately if you want to use the native mode.
-* Apache Maven {maven-version}
-* Cassandra or Docker installed
+To complete this quickstart guide, you need:
+
+* an IDE;
+* JDK 1.8+ installed with `JAVA_HOME` configured appropriately;
+* link:https://www.graalvm.org/[GraalVM] installed with the `GRAALVM_HOME` environment variable
+configured appropriately, if you want to
+link:https://quarkus.io/guides/building-native-image[use the native mode];
+* Apache Maven 3.5.3+;
+* A running link:https://cassandra.apache.org[Apache Cassandra],
+link:https://www.datastax.fr/products/datastax-enterprise[DataStax Enterprise] (DSE) or
+link:https://astra.datastax.com[DataStax Astra] database; or alternatively, a fresh Docker
+installation.
== Architecture
-The application built in this guide is quite simple: the user can add elements in a list using a
-form, and the items list is updated.
+This quickstart guide shows how to build a REST application using the
+link:https://github.com/datastax/cassandra-quarkus[Cassandra Quarkus extension], which allows you to
+connect to an Apache Cassandra, DataStax Enterprise (DSE) or DataStax Astra database, using the
+link:https://docs.datastax.com/en/developer/java-driver/latest[DataStax Java driver].
-All the information between the browser and the server is formatted as JSON.
+This guide will also use the
+link:https://docs.datastax.com/en/developer/java-driver/latest/manual/mapper[DataStax Object Mapper]
+– a powerful Java-to-CQL mapping framework that greatly simplifies your application's data access
+layer code by sparing you the hassle of writing your CQL queries by hand.
-The elements are stored in the Cassandra database.
+The application built in this quickstart guide is quite simple: the user can add elements in a list
+using a form, and the items list is updated. All the information between the browser and the server
+is formatted as JSON, and the elements are stored in the Cassandra database.
== Solution
We recommend that you follow the instructions in the next sections and create the application step
-by step.
-However, you can go right to the completed example.
+by step. However, you can go right to the completed example.
-The solution is located in the `quickstart`
-link:https://github.com/datastax/cassandra-quarkus/tree/master/quickstart[directory].
+The solution is located in the
+link:https://github.com/datastax/cassandra-quarkus/tree/master/quickstart[quickstart directory] of
+the Cassandra Quarkus extension GitHub repository.
-== Creating the Maven project
+== Creating a Blank Maven Project
First, create a new Maven project and copy the `pom.xml` file that is present in the `quickstart`
directory.
-The `pom.xml` is importing the RESTEasy/JAX-RS, JSON-B, Context Propagation and Cassandra Client
-extensions.
-
-We will be building a REST application using the
-link:https://docs.datastax.com/en/developer/java-driver/latest/manual/mapper[DataStax Object Mapper]
-to simplify the Data Access Layer code.
-
-The most important part of the `pom.xml` is adding the `cassandra-quarkus` extension:
-
-[source,xml]
-----
-
- com.datastax.oss.quarkus
- cassandra-quarkus-client
- ${quarkus.version}
-
-----
-
-Also make sure to follow the
-link:https://docs.datastax.com/en/developer/java-driver/latest/manual/mapper/config/[instructions]
-on how to add an annotation processor to the compiler configuration. When the project is compiled,
-additional mapper classes are generated.
+The `pom.xml` is importing all the Quarkus extensions and dependencies you need.
-== Creating JSON REST service
+== Creating the Data Model and Data Access Objects
In this example, we will create an application to manage a list of fruits.
-First, let's create the `Fruit` bean as follows:
+First, let's create our data model – represented by the `Fruit` class – as follows:
[source,java]
----
@Entity
+@PropertyStrategy(mutable = false)
public class Fruit {
- @PartitionKey private String storeId;
- @ClusteringColumn private String name;
- private String description;
+ @PartitionKey
+ private final String name;
- public Fruit() {}
+ private final String description;
- public Fruit(String storeId, String name, String description) {
- this.storeId = storeId;
+ public Fruit(String name, String description) {
this.name = name;
this.description = description;
}
-
- // getters, setters, hashCode and equals omitted for brevity
+ // getters, hashCode, equals, toString methods omitted for brevity
}
----
-We are using DataStax Java driver Object Mapper, which is why this class is annotated with an
-`@Entity`. Also, the `storeId` field represents a Cassandra partition key and `name` represents a
-clustering column, and so we are using the corresponding annotations from the Object Mapper library.
-It will allow the Mapper to generate proper CQL queries underneath.
+As stated above, we are using the DataStax Object Mapper. In other words, we are not going to write
+our CQL queries manually; instead, we will annotate our data model with a few annotations, and the
+mapper will generate proper CQL queries underneath.
+
+This is why the `Fruit` class is annotated with `@Entity`: this annotation marks it as an _entity
+class_ that is mapped to a Cassandra table. Its instances are meant to be automatically persisted
+into, and retrieved from, the Cassandra database. Here, the table name will be inferred from the
+class name: `fruit`.
+
+Also, the `name` field represents a Cassandra partition key, and so we are annotating it with
+`@PartitionKey` – another annotation from the Object Mapper library.
-IMPORTANT: Entity classes are required to have a default no-args constructor.
+IMPORTANT: Entity classes are normally required to have a default no-arg constructor, unless they
+are annotated with `@PropertyStrategy(mutable = false)`, which is the case here.
-To leverage the Mapper logic in this app we need to create a DAO:
+The next step is to create a DAO (Data Access Object) interface that will manage instances of
+`Fruit` entities:
[source,java]
----
@@ -115,13 +113,19 @@ public interface FruitDao {
void update(Fruit fruit);
@Select
- PagingIterable findById(String id);
+ PagingIterable findAll();
}
----
-This class exposes operations that will be used in the REST service.
+This interface exposes operations that will be used in our REST service. Again, the annotation
+`@Dao` comes from the DataStax Object Mapper, which will also automatically generate an
+implementation of this interface for you.
-Finally, the Mapper itself:
+Note also the special return type of the `findAll` method,
+link:https://docs.datastax.com/en/drivers/java/latest/com/datastax/oss/driver/api/core/PagingIterable.html[`PagingIterable`]:
+it's the base type of result sets returned by the driver.
+
+Finally, let's create the a Mapper interface:
[source,java]
----
@@ -132,128 +136,88 @@ public interface FruitMapper {
}
----
-The mapper is responsible for constructing instances of `FruitDao`. In the example above, the
-`FruitDao` instance will be connected to the same keyspace as the underlying session. More on that
-below.
-
-TIP: It is also possible to create DAO instances for different keyspaces. To learn how, see
-link:https://docs.datastax.com/en/developer/java-driver/4.7/manual/mapper/mapper/#dao-parameterization[DAO parameterization]
-in the driver docs.
-
-Next, we need a component to create our DAO instances: `FruitDaoProducer`. Indeed, Mapper and Dao
-instances are stateful objects, and should be created only once, as application-scoped singletons.
-This component will do exactly that, leveraging Quarkus Dependency Injection container:
-
-[source, java]
-----
-import com.datastax.oss.driver.api.core.CqlIdentifier;
-import com.datastax.oss.quarkus.runtime.api.config.CassandraClientConfig;
-import com.datastax.oss.quarkus.runtime.api.session.QuarkusCqlSession;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-public class FruitDaoProducer {
-
- private final FruitDao fruitDao;
- private final FruitDaoReactive fruitDaoReactive;
-
- @Inject
- public FruitDaoProducer(QuarkusCqlSession session) {
- // create a mapper
- FruitMapper mapper = new FruitMapperBuilder(session).build();
- // instantiate our Daos
- fruitDao = mapper.fruitDao();
- fruitDaoReactive = mapper.fruitDaoReactive();
- }
-
- @Produces
- @ApplicationScoped
- FruitDao produceFruitDao() {
- return fruitDao;
- }
-
- @Produces
- @ApplicationScoped
- FruitDaoReactive produceFruitDaoReactive() {
- return fruitDaoReactive;
- }
-}
-----
-
-Note how the `QuarkusCqlSession` instance is injected automatically by the cassandra-quarkus
-extension in the `FruitDaoProducer` constructor.
+The `@Mapper` annotation is yet another annotation recognized by the DataStax Object Mapper. A
+mapper is responsible for constructing instances of DAOs – in this case, out mapper is constructing
+an instance of our only DAO, `FruitDao`.
-Also note that `FruitMapperBuilder` is one of the classes generated automatically by the
-`java-driver-mapper-processor` annotation processor.
+== Creating a Service & JSON REST Endpoint
-Now create a `FruitService` that will be the business layer of our application and store/load the
-fruits from the Cassandra database.
+Now let's create a `FruitService` that will be the business layer of our application and store/load
+the fruits from the Cassandra database.
[source,java]
----
@ApplicationScoped
public class FruitService {
- private final FruitDao dao;
-
- @Inject
- public FruitService(FruitDao dao) {
- this.dao = dao;
- }
+ @Inject FruitDao dao;
public void save(Fruit fruit) {
dao.update(fruit);
}
- public List get(String id) {
- return dao.findById(id).all();
+ public List getAll() {
+ return dao.findAll().all();
}
}
----
-Note how the service receives a `FruitDao` instance in the constructor. This DAO instance is
-provided by `FruitDaoProducer` and injected automatically.
+Note how the service is being injected a `FruitDao` instance. This DAO instance is injected
+automatically.
+
+The Cassandra Quarkus extension allows you to inject any of the following beans in your own
+components:
+
+- All `@Mapper`-annotated interfaces in your project.
+- All `@Dao`-annotated interfaces in your project, as long as they are produced by a corresponding
+`@DaoFactory`-annotated method declared in a mapper interface from your project.
+- The
+link:https://javadoc.io/doc/com.datastax.oss.quarkus/cassandra-quarkus-client/latest/com/datastax/oss/quarkus/runtime/api/session/QuarkusCqlSession.html[`QuarkusCqlSession`]
+bean: this application-scoped, singleton bean is your main entry point to the Cassandra client; it
+is a specialized Cassandra driver session instance with a few methods tailored especially for
+Quarkus. Read its javadocs carefully!
+
+In our example, both `FruitMapper` and `FruitDao` could be injected anywhere. We chose to inject
+`FruitDao` in `FruitService`.
The last missing piece is the REST API that will expose GET and POST methods:
[source,java]
----
@Path("/fruits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
public class FruitResource {
- private static final String STORE_NAME = "acme";
-
@Inject FruitService fruitService;
@GET
- public List list() {
- return fruitService.get(STORE_NAME).stream()
- .map(fruit -> new FruitDto(fruit.getName(), fruit.getDescription()))
- .collect(Collectors.toList());
+ public List getAll() {
+ return fruitService.getAll().stream().map(this::convertToDto).collect(Collectors.toList());
}
@POST
public void add(FruitDto fruit) {
- fruitService.save(covertFromDto(fruit));
+ fruitService.save(convertFromDto(fruit));
+ }
+
+ private FruitDto convertToDto(Fruit fruit) {
+ return new FruitDto(fruit.getName(), fruit.getDescription());
}
- private Fruit covertFromDto(FruitDto fruitDto) {
- return new Fruit(fruitDto.getName(), fruitDto.getDescription(), STORE_NAME);
+ private Fruit convertFromDto(FruitDto fruitDto) {
+ return new Fruit(fruitDto.getName(), fruitDto.getDescription());
}
}
----
-The `list` and `add` operations are executed for the `storeId` "acme". This is the partition key of
-our data model. We can easily retrieve all rows from cassandra using that partition key.
-They will be sorted by the clustering column. `FruitResource` is using `FruitService` which
-encapsulates the data access logic.
+Notice how `FruitResource` is being injected a `FruitService` instance automatically.
-When creating the REST API we should not share the same entity object between REST API and data
-access layers. They should not be coupled to allow the API to evolve independently of the storage
-layer. This is the reason why the API is using a `FruitDto` class. This class will be used by
-Quarkus to convert JSON to java objects for client requests and java objects to JSON for the
-responses. The translation is done by quarkus-resteasy extension.
+It is generally not recommended using the same entity object between the REST API and the data
+access layer. These layers should indeed be decoupled and use distinct APIs in order to allow each
+API to evolve independently of the other. This is the reason why our REST API is using a different
+object: the `FruitDto` class – the word DTO stands for "Data Transfer Object". This DTO object will
+be automatically converted to and from JSON in HTTP messages:
[source,java]
----
@@ -272,15 +236,39 @@ public class FruitDto {
}
----
+The translation to and from JSON is done automatically by the Quarkus RestEasy extension, which is
+included in this guide's pom.xml file. If you want to add it manually to your application, add the
+below snippet to your application's ppm.xml file:
+
+[source,xml]
+----
+
+ io.quarkus
+ quarkus-resteasy
+
+
+ io.quarkus
+ quarkus-resteasy-jsonb
+
+----
+
IMPORTANT: DTO classes used by the JSON serialization layer are required to have a default no-arg
constructor.
-== Configuring the Cassandra database
+The conversion from DTO to JSON is handled automatically for us, but we still must convert from
+`Fruit` to `FruitDto` and vice versa. This must be done manually, which is why we have two
+conversion methods declared in `FruitResource`: `convertToDto` and `convertFromDto`.
+
+TIP: In our example, `Fruit` and `FruitDto` are very similar, so you might wonder why not use
+`Fruit` everywhere. In real life cases though, it's not uncommon to see DTOs and entities having
+very different structures.
+
+== Connecting to the Cassandra Database
=== Connecting to Apache Cassandra or DataStax Enterprise (DSE)
-The main properties to configure are: `contact-points`, to access the Cassandra database,
-`local-datacenter`, which is required by the driver, and – optionally – the keyspace to bind to.
+The main properties to configure are: `contact-points`, to access the Cassandra database;
+`local-datacenter`, which is required by the driver; and – optionally – the keyspace to bind to.
A sample configuration should look like this:
@@ -301,7 +289,7 @@ quarkus.cassandra.local-datacenter=datacenter1
quarkus.cassandra.keyspace=k1
----
-If your cluster requires plain text authentication, you can also provide two more settings:
+If your cluster requires plain text authentication, you must also provide two more settings:
`username` and `password`.
[source,properties]
@@ -310,11 +298,15 @@ quarkus.cassandra.auth.username=john
quarkus.cassandra.auth.password=s3cr3t
----
-=== Connecting to a cloud DataStax Astra database
+=== Connecting to a DataStax Astra Cloud Database
+
+When connecting to link:https://astra.datastax.com[DataStax Astra], instead of providing a contact
+point and a datacenter, you should provide a so-called _secure connect bundle_, which should point
+to a valid path to an Astra secure connect bundle file. You can download your secure connect bundle
+from the Astra web console.
-When connecting to Astra, instead of providing a contact point and a datacenter, you should provide
-`secure-connect-bundle`, which should point to a valid path to an Astra secure connect bundle, as
-well as `username` and`password`, since authentication is always required on Astra clusters.
+You will also need to provide a username and password, since authentication is always required on
+Astra clusters.
A sample configuration for DataStax Astra should look like this:
@@ -326,110 +318,126 @@ quarkus.cassandra.auth.password=s3cr3t
quarkus.cassandra.keyspace=k1
----
-=== Advanced driver configuration
+=== Advanced Driver Configuration
You can configure other Java driver settings using `application.conf` or `application.json` files.
-They need to be located in the classpath of your application.
-All settings will be passed automatically to the underlying driver configuration mechanism.
-Settings defined in `application.properties` with the `quarkus.cassandra` prefix will have priority
-over settings defined in `application.conf` or `application.json`.
+They need to be located in the classpath of your application. All settings will be passed
+automatically to the underlying driver configuration mechanism. Settings defined in
+`application.properties` with the `quarkus.cassandra` prefix will have priority over settings
+defined in `application.conf` or `application.json`.
To see the full list of settings, please refer to the
-link:https://docs.datastax.com/en/developer/java-driver/latest/manual/core/configuration/reference/[driver settings reference].
+link:https://docs.datastax.com/en/developer/java-driver/latest/manual/core/configuration/reference/[driver
+settings reference].
-== Running a Cassandra Database
+== Running a Local Cassandra Database
-By default, `CassandraClient` is configured to access a local Cassandra database on port 9042 (the
-default Cassandra port).
+By default, the Cassandra client is configured to access a local Cassandra database on port 9042
+(the default Cassandra port).
-IMPORTANT: Make sure that the setting `quarkus.cassandra.local-datacenter`
-matches the datacenter of your Cassandra cluster.
+IMPORTANT: Make sure that the setting `quarkus.cassandra.local-datacenter` matches the datacenter of
+your Cassandra cluster.
TIP: If you don't know the name of your local datacenter, this value can be found by running the
following CQL query: `SELECT data_center FROM system.local`.
If you want to use Docker to run a Cassandra database, you can use the following command to launch
-one:
+one in the background:
-[source,bash]
+[source,shell]
----
-docker run \
- --name local-cassandra-instance \
- -p 7000:7000 \
- -p 7001:7001 \
- -p 7199:7199 \
- -p 9042:9042 \
- -p 9160:9160 \
- -p 9404:9404 \
- -d \
- launcher.gcr.io/google/cassandra3
+docker run --name local-cassandra-instance -p 9042:9042 -d cassandra
----
-Note that only the 9042 port is required. All others all optional but provide enhanced features
-like JMX monitoring of the Cassandra instance.
-
Next you need to create the keyspace and table that will be used by your application. If you are
using Docker, run the following commands:
-[source,bash]
+[source,shell]
----
docker exec -it local-cassandra-instance cqlsh -e "CREATE KEYSPACE IF NOT EXISTS k1 WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}"
-docker exec -it local-cassandra-instance cqlsh -e "CREATE TABLE IF NOT EXISTS k1.fruit(store_id text, name text, description text, PRIMARY KEY((store_id), name))"
+docker exec -it local-cassandra-instance cqlsh -e "CREATE TABLE IF NOT EXISTS k1.fruit(name text PRIMARY KEY, description text)"
----
-If you're running Cassandra locally you can execute the cqlsh commands directly:
+You can also use the CQLSH utility to interactively interrogate your database:
-[source,bash]
+[source,shell]
----
-cqlsh -e "CREATE KEYSPACE IF NOT EXISTS k1 WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}
-cqlsh -e "CREATE TABLE IF NOT EXISTS k1.fruit(store_id text, name text, description text, PRIMARY KEY((store_id), name))
+docker exec -it local-cassandra-instance cqlsh
----
-== Creating a frontend
+== Testing the REST API
+
+In the project root directory:
+
+- Run `mvn clean package` and then `java -jar ./target/cassandra-quarkus-quickstart-*-runner.jar` to start the application;
+- Or better yet, run the application in dev mode: `mvn clean quarkus:dev`.
+
+Now you can use curl commands to interact with the underlying REST API.
+
+To create a fruit:
+
+[source,shell]
+----
+curl --header "Content-Type: application/json" \
+ --request POST \
+ --data '{"name":"apple","description":"red and tasty"}' \
+ http://localhost:8080/fruits
+----
+
+To retrieve fruits:
+
+[source,shell]
+----
+curl -X GET http://localhost:8080/fruits
+----
+
+== Creating a Frontend
Now let's add a simple web page to interact with our `FruitResource`.
-Quarkus automatically serves static resources located under the `META-INF/resources` directory.
-In the `src/main/resources/META-INF/resources` directory, add a `fruits.html` file with the content
-from this link:https://github.com/datastax/cassandra-quarkus/tree/master/quickstart/src/main/resources/META-INF/resources/fruits.html[fruits.html] file in it.
+Quarkus automatically serves static resources located under the `META-INF/resources` directory. In
+the `src/main/resources/META-INF/resources` directory, add a `fruits.html` file with the contents
+from link:src/main/resources/META-INF/resources/fruits.html[this file] in it.
You can now interact with your REST service:
-* start Quarkus with `mvn clean quarkus:dev`
-* open a browser to `http://localhost:8080/fruits.html`
-* add new fruits to the list via the form
+* If you haven't done yet, start your application with `mvn clean quarkus:dev`;
+* Point your browser to `http://localhost:8080/fruits.html`;
+* Add new fruits to the list via the form.
[[reactive]]
-== Reactive Cassandra Client
+== Reactive Programming with the Cassandra Client
-When using `QuarkusCqlSession` you have access to reactive variant of methods that integrate with
-Quarkus and Mutiny.
+The
+link:https://javadoc.io/doc/com.datastax.oss.quarkus/cassandra-quarkus-client/latest/com/datastax/oss/quarkus/runtime/api/session/QuarkusCqlSession.html[`QuarkusCqlSession`
+interface] gives you access to a series of reactive methods that integrate seamlessly with Quarkus
+and its reactive framework, Mutiny.
TIP: If you're not familiar with Mutiny, read the
-link:getting-started-reactive[Getting Started with Reactive guide] first.
+link:https://quarkus.io/guides/getting-started-reactive[Getting Started with Reactive guide] first.
-Let's rewrite the previous example using reactive programming with Mutiny.
+Let's rewrite our application using reactive programming with Mutiny.
-Firstly, we need to implement the `@Dao` that works in a reactive way:
+First, let's to declare another DAO interface that works in a reactive way:
[source,java]
----
@Dao
-public interface FruitDaoReactive {
+public interface ReactiveFruitDao {
@Update
- Uni updateAsync(Fruit fruitDao);
+ Uni updateAsync(Fruit fruit);
@Select
- MutinyMappedReactiveResultSet findByIdAsync(String id);
+ MutinyMappedReactiveResultSet findAll();
}
----
-Please note the usage of `MutinyMappedReactiveResultSet` - it is a specialized `Mutiny` type
-converted from the original `Publisher` returned by the driver, which also exposes a few extra
-methods, e.g. to obtain the query execution info. If you don't need anything in that interface,
-you can also simply declare your method to return `Multi`: `Multi findByIdAsync(String id)`,
+Note the usage of `MutinyMappedReactiveResultSet` - it is a specialized `Mutiny` type converted from
+the original `Publisher` returned by the driver, which also exposes a few extra methods, e.g. to
+obtain the query execution info. If you don't need anything in that interface, you can also simply
+declare your method to return `Multi`: `Multi findAll()`,
Similarly, the method `updateAsync` returns a `Uni` - it is automatically converted from the
original result set returned by the driver.
@@ -442,162 +450,354 @@ publisher is expected to emit at most one row, then complete. This is suitable f
(they return no rows), or for read queries guaranteed to return one row at most (count queries, for
example).
-Next, we need to adapt the `FruitMapper` to construct a `FruitDaoReactive` instance:
+Next, we need to adapt the `FruitMapper` to construct a `ReactiveFruitDao` instance:
-[source, java]
+[source,java]
----
@Mapper
public interface FruitMapper {
// the existing method omitted
@DaoFactory
- FruitDaoReactive fruitDaoReactive();
+ ReactiveFruitDao reactiveFruitDao();
}
----
-Now, we can create a `FruitReactiveService` that leverages the reactive `@Dao`:
+Now, we can create a `ReactiveFruitService` that leverages our reactive DAO:
-[source, java]
+[source,java]
----
@ApplicationScoped
-public class FruitReactiveService {
-
- private final FruitDaoReactive fruitDao;
+public class ReactiveFruitService {
- @Inject
- public FruitReactiveService(FruitDaoReactive fruitDao) {
- this.fruitDao = fruitDao;
- }
+ @Inject ReactiveFruitDao fruitDao;
public Uni add(Fruit fruit) {
return fruitDao.update(fruit);
}
- public Multi get(String id) {
- return fruitDao.findById(id);
+ public Multi getAll() {
+ return fruitDao.findAll();
}
}
----
-NOTE: The `get()` method above returns `Multi`, and the `add()` method returns `Uni`; these types
-are compatible with the Quarkus reactive REST API.
-
-To integrate the reactive logic with REST API, you need to have a dependency to
-`quarkus-resteasy-mutiny`:
-
-[source, xml]
-----
-
- io.quarkus
- quarkus-resteasy-mutiny
-
-----
-
-It provides an integration layer between `Multi`, `Uni` and the REST API.
-
-Finally, we can create a `FruitReactiveResource`:
+Finally, we can create a `ReactiveFruitResource`:
-[source, java]
+[source,java]
----
@Path("/reactive-fruits")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
-public class FruitReactiveResource {
- private static final String STORE_NAME = "acme";
- @Inject FruitReactiveService service;
+public class ReactiveFruitResource {
+
+ @Inject ReactiveFruitService service;
@GET
public Multi getAll() {
- return service
- .get(STORE_NAME)
- .map(fruit -> new FruitDto(fruit.getName(), fruit.getDescription()));
+ return service.getAll().map(this::convertToDto);
}
@POST
- public Multi add(FruitDto fruitDto) {
- Fruit fruit = covertFromDto(fruitDto);
- return service.add(fruit).then(ignored -> getAll());
+ public Uni add(FruitDto fruitDto) {
+ return service.add(convertFromDto(fruitDto));
+ }
+
+ private FruitDto convertToDto(Fruit fruit) {
+ return new FruitDto(fruit.getName(), fruit.getDescription());
}
- private Fruit covertFromDto(FruitDto fruitDto) {
- return new Fruit(fruitDto.getName(), fruitDto.getDescription(), STORE_NAME);
+ private Fruit convertFromDto(FruitDto fruitDto) {
+ return new Fruit(fruitDto.getName(), fruitDto.getDescription());
}
}
----
-NOTE: All methods exposed via REST interface are returning reactive types from the Mutiny API.
+The above resource is exposing a new endpoint, `reactive-fruits`. Its capabilities are identical to
+the ones that we created before with `FruitResource`, but everything is handled in a reactive
+fashion, without any blocking operation.
-== Creating a reactive frontend
+NOTE: The `getAll()` method above returns `Multi`, and the `add()` method returns `Uni`. These types
+are the same Mutiny types that we met before; they are automatically recognized by the Quarkus
+reactive REST API, so we don't need to convert them into JSON ourselves.
-Now let's add a simple web page to interact with our `FruitReactiveResource`.
-In the `src/main/resources/META-INF/resources` directory, add a `reactive-fruits.html` file with
-the content from this
-link:https://github.com/datastax/cassandra-quarkus/tree/master/quickstart/src/main/resources/META-INF/resources/reactive-fruits.html[reactive-fruits.html]
-file in it.
+To effectively integrate the reactive logic with the REST API, your application needs to declare a
+dependency to the Quarkus RestEasy Mutiny extension:
+
+[source,xml]
+----
+
+ io.quarkus
+ quarkus-resteasy-mutiny
+
+----
+
+This dependency is already included in this guide's pom.xml, but if you are starting a new project
+from scratch, make sure to include it.
+
+== Testing the Reactive REST API
+
+Run the application in dev mode as explained above, then you can use curl commands to interact with
+the underlying REST API.
+
+To create a fruit using the reactive REST endpoint:
+
+[source,shell]
+----
+curl --header "Content-Type: application/json" \
+ --request POST \
+ --data '{"name":"banana","description":"yellow and sweet"}' \
+ http://localhost:8080/reactive-fruits
+----
+
+To retrieve fruits with the reactive REST endpoint:
+
+[source,shell]
+----
+curl -X GET http://localhost:8080/reactive-fruits
+----
+
+== Creating a Reactive Frontend
+
+Now let's add a simple web page to interact with our `ReactiveFruitResource`. In the
+`src/main/resources/META-INF/resources` directory, add a `reactive-fruits.html` file with the
+contents from link:src/main/resources/META-INF/resources/reactive-fruits.html[this file] in it.
You can now interact with your reactive REST service:
-* start Quarkus with `mvn clean quarkus:dev`
-* open a browser to `http://localhost:8080/reactive-fruits.html`
-* add new fruits to the list via the form
+* If you haven't done yet, start your application with `mvn clean quarkus:dev`;
+* Point your browser to `http://localhost:8080/reactive-fruits.html`;
+* Add new fruits to the list via the form.
+== Health Checks
-== Connection Health Check
+If you are using the Quarkus SmallRye Health extension, then the Cassandra client will automatically
+add a readiness health check to validate the connection to the Cassandra cluster. This extension is
+already included in this guide's pom.xml, but if you need to include it manually in your
+application, add the following:
-If you are using the `quarkus-smallrye-health` extension, `cassandra-quarkus` will automatically
-add a readiness health check to validate the connection to the cluster.
+[source,xml]
+----
+
+ io.quarkus
+ quarkus-smallrye-health
+
+----
-So when you access the `/q/health/ready` endpoint of your application you will have information about
-the connection validation status.
+When health checks are available, you can access the `/health/ready` endpoint of your application
+and have information about the connection validation status.
+
+Running in dev mode with `mvn clean quarkus:dev`, if you point your browser to
+http://localhost:8080/health/ready you should see an output similar to the following one:
+
+[source,text]
+----
+{
+ "status": "UP",
+ "checks": [
+ {
+ "name": "DataStax Apache Cassandra Driver health check",
+ "status": "UP",
+ "data": {
+ "cqlVersion": "3.4.4",
+ "releaseVersion": "3.11.7",
+ "clusterName": "Test Cluster",
+ "datacenter": "datacenter1",
+ "numberOfNodes": 1
+ }
+ }
+ ]
+}
+----
-TIP: This behavior can be disabled by setting the `quarkus.cassandra.health.enabled` property to
-`false` in your `application.properties`.
+TIP: If you need health checks globally enabled in your application, but don't want to activate
+Cassandra health checks, you can disable Cassandra health checks by setting the
+`quarkus.cassandra.health.enabled` property to `false` in your `application.properties`.
== Metrics
-If you are using the `quarkus-smallrye-metrics` extension, `cassandra-quarkus` can provide metrics
-about QuarkusCqlSession and Cassandra nodes.
+The Cassandra Quarkus client can provide metrics about the Cassandra session and about individual
+Cassandra nodes. It supports both Micrometer and MicroProfile.
+
+The first step to enable metrics is to add a few additional dependencies depending on the metrics
+framework you plan to use.
+
+=== Enabling Metrics with Micrometer
+
+Micrometer is the recommended metrics framework in Quarkus applications since Quarkus 1.9.
+
+To enable Micrometer metrics in your application, you need to add the following to your pom.xml.
+
+For Quarkus 1.11+:
+
+[source,xml]
+----
+
+ com.datastax.oss
+ java-driver-metrics-micrometer
+
+
+ io.quarkus
+ quarkus-micrometer-registry-prometheus
+
+----
+
+For Quarkus < 1.11:
+
+[source,xml]
+----
+
+ com.datastax.oss
+ java-driver-metrics-micrometer
+
+
+ io.quarkus
+ quarkus-micrometer
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+
+----
+
+This guide uses Micrometer, so the above dependencies are already included in this guide's pom.xml.
-TIP: This behavior must first be enabled by setting the `quarkus.cassandra.metrics.enabled`
-property to `true` in your `application.properties`.
+=== Enabling Metrics with MicroProfile Metrics
-The next step that you need to do is set explicitly which metrics should be enabled.
+Remove any dependency to Micrometer from your pom.xml, then add the following ones instead:
-The `quarkus.cassandra.metrics.session-enabled` and `quarkus.cassandra.metrics.node-enabled`
-properties should be used for enabling metrics; the former should contain a list of session-level
-metrics to enable, while the latter should contain a list of node-level metrics to enable. Both
-properties accept a comma-separated list of valid metric names.
+[source,xml]
+----
+
+ com.datastax.oss
+ java-driver-metrics-microprofile
+
+
+ io.quarkus
+ quarkus-smallrye-metrics
+
+----
+
+=== Enabling Cassandra Metrics
-For example, to enable `session.connected-nodes`, `session.bytes-sent`, and
-`node.pool.open-connections` you should add the following settings to your `application.properties`:
+Even when metrics are enabled in your application, the Cassandra client will not report any metrics,
+unless you opt-in for this feature. So your next step is to enable Cassandra metrics in your
+`application.properties` file.
-[source, properties]
+[source,properties]
----
quarkus.cassandra.metrics.enabled=true
-quarkus.cassandra.metrics.session-enabled=connected-nodes,bytes-sent
-quarkus.cassandra.metrics.node-enabled=pool.open-connections
----
-For the full list of available metrics, please refer to the
-link:https://docs.datastax.com/en/developer/java-driver/latest/manual/core/configuration/reference/[driver settings reference]
-and the `advanced.metrics` section.
+That's it!
+
+The final (and optional) step is to customize which specific Cassandra metrics you would like the
+Cassandra client to track. Several metrics can be tracked; if you skip this step, a default set of
+useful metrics will be automatically tracked.
+
+TIP: For the full list of available metric names, please refer to the
+link:https://docs.datastax.com/en/developer/java-driver/latest/manual/core/configuration/reference/[driver
+settings reference] page; search for the `advanced.metrics` section.
+Also, Cassandra driver metrics are covered in detail in the
+https://docs.datastax.com/en/developer/java-driver/latest/manual/core/metrics/[driver manual].
-When metrics are enabled and you access the `/q/metrics` endpoint of your application,
-you will see metric reports for all enabled metrics.
+If you do wish to customize which metrics to track, you should use the following properties:
-== Building a native executable
+* `quarkus.cassandra.metrics.session.enabled` should contain the session-level metrics to enable
+(metrics that are global to the session).
+* `quarkus.cassandra.metrics.node.enabled` should contain the node-level metrics to enable (metrics
+for which each node contacted by the Cassandra client gets its own metric value).
-You can use the Cassandra client in a native executable.
+Both properties accept a comma-separated list of valid metric names.
-You can build a native executable with the `mvn clean package -Dnative` command.
+For example, let's assume that you wish to enable the following three Cassandra metrics:
-Running it is as simple as executing `./target/quickstart-1.0.0-SNAPSHOT-runner`.
+* Session-level: `session.connected-nodes` and `session.bytes-sent`;
+* Node-level: `node.pool.open-connections`.
+
+Then you should add the following settings to your `application.properties`:
+
+[source,properties]
+----
+quarkus.cassandra.metrics.enabled=true
+quarkus.cassandra.metrics.session.enabled=connected-nodes,bytes-sent
+quarkus.cassandra.metrics.node.enabled=pool.open-connections
+----
+
+This guide's `application.properties` file has already many metrics enabled; you can use its metrics
+list as a good starting point for exposing useful Cassandra metrics in your application.
+
+When metrics are properly enabled, metric reports for all enabled metrics are available at the
+`/metrics` REST endpoint of your application.
+
+Running in dev mode with `mvn clean quarkus:dev`, if you point your browser to
+`http://localhost:8080/metrics` you should see a list of metrics; search for metrics whose names
+contain `cassandra`.
+
+IMPORTANT: For Cassandra metrics to show up, the Cassandra client needs to be initialized and
+connected; if you are using lazy initialization (see below), you won't see any Cassandra metrics
+until your application actually connects and hits the database for the first time.
+
+== Running in native mode
+
+If you installed GraalVM, you can link:https://quarkus.io/guides/building-native-image[build a
+native image] using:
+
+[source,shell]
+----
+mvn clean package -Dnative
+----
+
+Beware that native compilation can take a significant amount of time! Once the compilation is done,
+you can run the native executable as follows:
+
+[source,shell]
+----
+./target/cassandra-quarkus-quickstart-*-runner
+----
You can then point your browser to `http://localhost:8080/fruits.html` and use your application.
+== Eager vs Lazy Initialization
+
+This extension allows you to inject either:
+
+- a `QuarkusCqlSession` bean;
+- or the asynchronous version of this bean, that is, `CompletionStage`;
+- or the reactive version of this bean, that is, `Uni`.
+
+The most straightforward approach is obviously to inject `QuarkusCqlSession` directly. This should
+work just fine for most applications; however, the `QuarkusCqlSession` bean needs to be initialized
+before it can be used, and this process is blocking.
+
+Fortunately, it is possible to control when the initialization should happen: the
+`quarkus.cassandra.init.eager-init` parameter determines if the `QuarkusCqlSession` bean should be
+initialized on its first access (lazy) or when the application is starting (eager). The default
+value of this parameter is `false`, meaning the init process is lazy: the `QuarkusCqlSession` bean
+will be initialized lazily on its first access – for example, when there is a first REST request
+that needs to interact with the Cassandra database.
+
+Using lazy initialization speeds up your application startup time, and avoids startup failures if
+the Cassandra database is not available. However, it could also prove dangerous if your code is
+fully asynchronous, e.g. if you are using https://quarkus.io/guides/reactive-routes[reactive
+routes]: indeed, the lazy initialization could accidentally happen on a thread that is not allowed
+to block, such as a Vert.x event loop thread. Therefore, setting `quarkus.cassandra.init.eager-init`
+to `false` and injecting `QuarkusCqlSession` should be avoided in these contexts.
+
+If you want to use Vert.x (or any other reactive framework) and keep the lazy initialization
+behavior, you should instead inject only `CompletionStage` or
+`Uni`. When injecting these beans, the initialization process will be triggered
+lazily, but it will happen in the background, in a non-blocking way, leveraging the Vert.x event
+loop. This way you don't risk blocking the Vert.x thread.
+
+Alternatively, you can set `quarkus.cassandra.init.eager-init` to true: in this case the session
+bean will be initialized eagerly during application startup, on the Quarkus main thread. This would
+eliminate any risk of blocking a Vert.x thread, at the cost of making your startup time (much)
+longer.
+
== Conclusion
Accessing a Cassandra database from a client application is easy with Quarkus and the Cassandra
-extension, which provides configuration and native support for the DataStax Java driver for
-Apache Cassandra.
+extension, which provides configuration and native support for the DataStax Java driver for Apache
+Cassandra.
diff --git a/docs/src/main/asciidoc/cdi-integration.adoc b/docs/src/main/asciidoc/cdi-integration.adoc
index 93e2440aa1a9f7..13a23792f5ce61 100644
--- a/docs/src/main/asciidoc/cdi-integration.adoc
+++ b/docs/src/main/asciidoc/cdi-integration.adoc
@@ -340,8 +340,8 @@ IMPORTANT: A build step that consumes the `ObserverRegistrationPhaseBuildItem` s
@BuildStep
void syntheticObserver(ObserverRegistrationPhaseBuildItem observerRegistrationPhase,
BuildProducer myBuildItem,
- BuildProducer observerConfigurators) {
- observerConfigurators.produce(new ObserverConfiguratorBuildItem(observerRegistrationPhase.getContext()
+ BuildProducer observerConfigurationRegistry) {
+ observerConfigurationRegistry.produce(new ObserverConfiguratorBuildItem(observerRegistrationPhase.getContext()
.configure()
.beanClass(DotName.createSimple(MyBuildStep.class.getName()))
.observedType(String.class)
diff --git a/docs/src/main/asciidoc/conditional-extension-dependencies.adoc b/docs/src/main/asciidoc/conditional-extension-dependencies.adoc
new file mode 100644
index 00000000000000..3e5cc5927a9024
--- /dev/null
+++ b/docs/src/main/asciidoc/conditional-extension-dependencies.adoc
@@ -0,0 +1,178 @@
+////
+This guide is maintained in the main Quarkus repository
+and pull requests should be submitted there:
+https://github.com/quarkusio/quarkus/tree/master/docs/src/main/asciidoc
+////
+= Quarkus - Conditional Extension Dependencies
+
+include::./attributes.adoc[]
+
+Quarkus extension dependencies are usually configured in the same way as any other project dependencies in the project's build file, e.g. the Maven `pom.xml` or the Gradle build scripts. However, there are dependency types that aren't yet supported out-of-the-box by Maven and Gradle. What we refer here to as "conditional dependencies" is one example.
+
+== Conditional Dependencies
+
+The idea behind the notion of the conditional dependency is that such a dependency must be activated only if a certain condition is satisfied. If the condition is not satisfied then the dependency **must not** be activated. In that regard, conditional dependencies can be categorized as optional, i.e. they may or may not appear in the resulting set of project dependencies.
+
+In which cases could conditional dependencies be useful? A typical example would be a component that should be activated **only** in case all of its required dependencies are available. If one or more of the component's required dependencies aren't available, instead of failing, the component should simply not be activated.
+
+== Quarkus Conditional Extension Dependencies
+
+Quarkus supports conditional extension dependencies. I.e. one Quarkus extension may declare one or more conditional dependencies on other Quarkus extensions. Conditional dependencies on and from non-extension artifacts aren't supported.
+
+Let's take the following scenario as an example: `quarkus-extension-a` has an optional dependency on `quarkus-extension-b` which should be included in a Quarkus application only if `quarkus-extension-c` is found among its dependencies (direct or transitive). In other words, the presence of `quarkus-extension-c` is the condition which, if satisfied, enables `quarkus-extension-b` during the build of a Quarkus application.
+
+The condition which triggers activation of an extension is configured in the extension's descriptor, which is included into the runtime artifact of the extension as `META-INF/quarkus-extension.properties`. Given that extension descriptor is generated by the Quarkus plugin at extension build time, extension developers can add the following configuration to express the condition which would have to be satisfied for the extension to be activated:
+
+[source,xml]
+----
+
+
+
+
+ quarkus-extension-b <1>
+
+
+
+
+
+
+ io.quarkus
+ quarkus-bootstrap-maven-plugin
+ ${quarkus.version}
+
+
+ process-resources
+
+ extension-descriptor <2>
+
+
+ <3>
+ org.acme:quarkus-extension-c <4>
+
+
+
+
+
+
+
+----
+
+<1> runtime Quarkus extension artifact ID, in our example `quarkus-extension-b`;
+<2> the goal that generates the extension descriptor which every Quarkus runtime extension project should be configured with;
+<3> configuration of the condition which will have to be satisfied for this extension to be included into a Quarkus application expressed as a list of artifacts that must be present among the application dependencies;
+<4> an artifact key (in the format of `groupId:artifactId[::]` but typically simply `:`) of the artifact that must be present among the application dependencies for the condition to be satisfied.
+
+NOTE: In the example above the `artifact` used in the condition configuration happens to be a runtime Quarkus extension artifact but it could as well be any other artifact. There could also be more than one `artifact` element in the body of `dependencyCondition`.
+
+Now, having a dependency activating condition in the descriptor of `quarkus-extension-b`, other extensions may declare a conditional dependency on it.
+
+A conditional dependency is configured in the runtime artifact of a Quarkus extension. In our example, it's the `quarkus-extension-a` that has a conditional dependency on `quarkus-extension-b`, which can be expressed in two ways.
+
+=== Declaring a dependency as `optional`
+
+If an extension was configured with a dependency condition in its descriptor, other extensions may configure a conditional dependency on it by simply adding `true` to the dependency configuration. In our example it would look like this:
+
+[source,xml]
+----
+
+
+
+
+ quarkus-extension-a <1>
+
+
+
+
+
+ org.acme
+ quarkus-extension-b <2>
+ true
+
+
+
+----
+
+<1> the runtime extension artifact `quarkus-extension-a`
+<2> declares an optional Maven dependency on the runtime extension artifact `quarkus-extension-b`
+
+IMPORTANT: In general, for every runtime extension artifact dependency on another runtime extension artifact there must be a corresponding deployment extension artifact dependency on the other deployment extension artifact. And if the runtime dependency is declared as optional then the corresponding deployment dependency **must** also be configured as optional.
+
+[source,xml]
+----
+
+
+
+
+ quarkus-extension-a-deployment <1>
+
+
+
+
+
+ org.acme
+ quarkus-extension-b-deployment <2>
+ true
+
+
+
+----
+
+<1> the deployment extension artifact `quarkus-extension-a-deployment`
+<2> declares an optional Maven dependency on the deployment extension artifact `quarkus-extension-b-deployment`
+
+Normally, optional Maven extension dependencies are ignored by the Quarkus dependency resolver at build time. In this case though, the optional dependency `quarkus-extension-b` includes a dependency condition in its extension descriptor, which turns this optional Maven dependency into a Quarkus conditional extension dependency.
+
+IMPORTANT: If `quarkus-extension-b` wasn't declared as `true` that would make `quarkus-extension-b` a required dependency of `quarkus-extension-a` and its dependency condition would be ignored.
+
+=== Declaring a conditional dependency in the Quarkus extension descriptor
+
+Conditional dependencies can also be configured in the Quarkus extension descriptor. The conditional dependency configured above could be expressed in the extension descriptor of `quarkus-extension-a` as:
+
+[source,xml]
+----
+
+
+
+
+ quarkus-extension-a <1>
+
+
+
+
+
+
+ io.quarkus
+ quarkus-bootstrap-maven-plugin
+ ${quarkus.version}
+
+
+ process-resources
+
+ extension-descriptor <2>
+
+
+ <3>
+ org.acme:quarkus-extension-b:${b.version} <4>
+
+
+
+
+
+
+
+----
+
+<1> runtime Quarkus extension artifact ID, in our example `quarkus-extension-a`
+<2> the goal that generates the extension descriptor which every Quarkus runtime extension project should be configured with
+<3> conditional dependency configuration element
+<4> artifact coordinates of conditional dependencies on other extensions.
+
+In this case, the Maven dependency is not at all required in the `pom.xml`.
diff --git a/docs/src/main/asciidoc/config-reference.adoc b/docs/src/main/asciidoc/config-reference.adoc
index 0e3aaaae3e37e8..4ee6f4d16dbff5 100644
--- a/docs/src/main/asciidoc/config-reference.adoc
+++ b/docs/src/main/asciidoc/config-reference.adoc
@@ -13,10 +13,10 @@ include::./attributes.adoc[]
:toc:
In this reference guide we're going to describe various aspects of Quarkus configuration.
-A Quarkus application and Quarkus itself (core and extensions) are both configured via the same mechanism that leverages the https://microprofile.io/project/eclipse/microprofile-config[MicroProfile Config] API.
-Quarkus configuration is based on https://github.com/smallrye/smallrye-config[SmallRye Config], an implementation of the MicroProfile Config specification.
-All of the standard features are supported.
-Moreover, there are several additional features which are made available by the SmallRye Config project as well as by Quarkus itself.
+A Quarkus application and Quarkus itself (core and extensions) are both configured via the same mechanism that leverages
+the https://github.com/smallrye/smallrye-config[SmallRye Config] API an implementation of the
+https://microprofile.io/project/eclipse/microprofile-config[MicroProfile Config] specification. Moreover, there are
+several additional features which are made available by Quarkus itself.
TIP: If you're looking for information how to make a Quarkus extension configurable then see the <> guide.
@@ -88,7 +88,7 @@ TIP: Quarkus supports the use of <>.
For the purpose of this guide, we will use an application configuration file located in `src/main/resources/application.properties`.
Edit the file with the following content:
diff --git a/docs/src/main/asciidoc/context-propagation.adoc b/docs/src/main/asciidoc/context-propagation.adoc
index 147ca885f85450..5d6f9698ea88cc 100644
--- a/docs/src/main/asciidoc/context-propagation.adoc
+++ b/docs/src/main/asciidoc/context-propagation.adoc
@@ -18,6 +18,7 @@ If you write reactive/async code, you have to cut your work into a pipeline of c
as well as `ThreadLocal` variables stop working, because your reactive code gets executed in another thread,
after the caller ran its `finally` block.
+link:https://github.com/smallrye/smallrye-context-propagation[SmallRye Context Propagation] an implementation of
link:https://github.com/eclipse/microprofile-context-propagation[MicroProfile Context Propagation] was made to
make those Quarkus extensions work properly in reactive/async settings. It works by capturing those contextual
values that used to be in thread-locals, and restoring them when your code is called.
diff --git a/docs/src/main/asciidoc/datasource.adoc b/docs/src/main/asciidoc/datasource.adoc
index f011b9794b121b..0074005050b66b 100644
--- a/docs/src/main/asciidoc/datasource.adoc
+++ b/docs/src/main/asciidoc/datasource.adoc
@@ -40,6 +40,7 @@ please refer to the link:reactive-sql-clients[Reactive SQL clients guide].
This is a quick introduction to datasource configuration.
If you want a better understanding of how all this works, this guide has a lot more information in the subsequent paragraphs.
+[[dev-services]]
=== Zero Config Setup (DevServices)
When testing or running in dev mode Quarkus can even provide you with a zero config database out of the box, a feature
diff --git a/docs/src/main/asciidoc/dev-mode-differences.adoc b/docs/src/main/asciidoc/dev-mode-differences.adoc
new file mode 100644
index 00000000000000..4a00bd60e5b23f
--- /dev/null
+++ b/docs/src/main/asciidoc/dev-mode-differences.adoc
@@ -0,0 +1,106 @@
+////
+This guide is maintained in the main Quarkus repository
+and pull requests should be submitted there:
+https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
+////
+= Quarkus - How dev-mode differs from a production application
+
+include::./attributes.adoc[]
+
+This document explains how the dev-mode in Quarkus differs from a production application.
+
+== Intro
+
+Quarkus provides a dev-mode (explained in more detail link:maven-tooling.adoc#dev-mode[here] and link:gradle-tooling.adoc#dev-mode[here]) which greatly aids
+during development but should *NEVER* be used in production.
+
+[[architectural-differences]]
+== Architectural differences
+
+Feature sets aside, the Quarkus application that is run under dev-mode differs architecturally from the production application (i.e. the one that is run using `java -jar ...`).
+
+In dev-mode, Quarkus uses a ClassLoader hierarchy (explained in detail link:class-loading-reference.adoc[here]) that enables the live reload of user code
+without requiring a rebuild and restart of the application.
+
+In a production application, the aforementioned class loading infrastructure is entirely absent - there is a single, purpose built ClassLoader that loads (almost) all classes and dependencies.
+
+== Dev-mode features
+
+In keeping with the mantra of providing developer joy, Quarkus provides a host of features when dev-mode is enabled. The most important features are:
+
+=== Live reload
+
+This mightily important feature needs no introduction and has already been mentioned in the <> section.
+
+=== Dev UI
+
+Quarkus provides a very useful link:dev-ui.adoc[UI] accessible from the browser at `/q/dev`. This UI allows a developer to see the state of the application, but
+also provides access to various actions that can change that state (depending on the extensions that are present).
+Examples of such operations are:
+
+* Changing configuration values
+* Running Database migration scripts
+* Clearing of caches
+* Running scheduled operations
+* Building a container
+
+=== Error pages
+
+In an effort to make development errors very easy to diagnose, Quarkus provides various detailed error pages when running in dev-mode.
+
+=== Database import scripts
+
+The `quarkus-hibernate-orm` extension will run the `import.sql` script in `src/main/resources` when Quarkus is running in dev-mode. More details can be found link:hibernate-orm.adoc#dev-mode[here].
+
+=== Dev Services
+
+When testing or running in dev-mode Quarkus can even provide you with a zero config database out of the box, a feature we refer to as DevServices.
+More information can be found link:datasource.adoc#dev-services[here].
+
+=== Swagger UI
+
+The `quarkus-smallrye-openapi` extension will expose the Swagger UI when Quarkus is running in dev-mode. Additional information can be found link:openapi-swaggerui.adoc#dev-mode[here].
+
+=== GraphQL UI
+
+The `quarkus-smallrye-graphql` extension will expose the GraphiQL UI when Quarkus is running in dev-mode. More details can be found link:smallrye-graphql.adoc#ui[here].
+
+=== Health UI
+
+The `quarkus-smallrye-health` extension will expose the Health UI when Quarkus is running in dev-mode. link:smallrye-health.adoc#ui[This] section provides additional information.
+
+=== Mock mailer
+
+The `quarkus-mailer` extension will enable an in-memory mock mail server when Quarkus is running in dev-mode. See link:mailer.adoc#testing[this] for more details.
+
+
+=== gRPC
+
+* The gRPC Reflection Service is enabled in dev mode by default. That lets you use tools such as `grpcurl`. In production mode, the reflection service is disabled. You can enable it explicitly using `quarkus.grpc-server.enable-reflection-service=true`.
+
+* In dev-mode, `quarkus.grpc.server.instances` has no effect.
+
+=== Others
+
+There might be other configuration properties (depending on the extensions added to the application) that have no effect in dev-mode.
+
+
+== Performance implications
+
+In dev-mode minimizing the runtime footprint of the application is not the primary objective (although Quarkus still starts plenty fast and consumes little memory even in dev-mode) - the primary objective
+is enabling developer joy.
+Therefore, many more classes are loaded and build time operations also take place every time a live-reload is performed.
+
+In contrast, in a production application the main objective for Quarkus is to consume the least amount of memory and startup in the smallest amount of time.
+Thus, when running the production application, build time operations are not performed (by definition) and various infrastructure classes needed at build time are not present at all at runtime.
+Furthermore, the purpose built ClassLoader that comes with the link:maven-tooling.adoc#fast-jar[fast-jar] package type ensures that class lookup is done as fast as possible while also keeping
+the minimum amount of jars in memory.
+
+== Security implications
+
+Perhaps the most important reason why dev-mode applications should not be run in production is that the dev-mode allows reading information that could be confidential (via the Dev-UI)
+while also giving access to operations that could be destructive (either by exposing endpoints that should not be available in production application or via the Dev-UI).
+
+== Native binary
+
+When a native binary is created (explained in detail link:building-native-image[here]), it is *always* built from a production application.
diff --git a/docs/src/main/asciidoc/elasticsearch.adoc b/docs/src/main/asciidoc/elasticsearch.adoc
index dbc4ae998597ef..3c019f36638a46 100644
--- a/docs/src/main/asciidoc/elasticsearch.adoc
+++ b/docs/src/main/asciidoc/elasticsearch.adoc
@@ -282,7 +282,6 @@ import java.nio.file.Paths;
import java.security.KeyStore;
@ElasticsearchClientConfig
-@Dependent
public class SSLContextConfigurator implements RestClientBuilder.HttpClientConfigCallback {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
@@ -307,6 +306,12 @@ public class SSLContextConfigurator implements RestClientBuilder.HttpClientConfi
----
See https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_encrypted_communication.html[Elasticsearch documentation] for more details on this particular example.
+[NOTE]
+====
+Classes marked with `@ElasticsearchClientConfig` are made application scoped CDI beans by default.
+You can override the scope at the class level if you prefer a different scope.
+====
+
== Running an Elasticsearch cluster
As by default, the Elasticsearch client is configured to access a local Elasticsearch cluster on port 9200 (the default Elasticsearch port),
diff --git a/docs/src/main/asciidoc/getting-started-reactive.adoc b/docs/src/main/asciidoc/getting-started-reactive.adoc
index 0976da65afef5c..a6d8ec483513c9 100644
--- a/docs/src/main/asciidoc/getting-started-reactive.adoc
+++ b/docs/src/main/asciidoc/getting-started-reactive.adoc
@@ -163,7 +163,7 @@ Uni uni =
});
----
-Last but not least, Mutiny has built-in integration with MicroProfile Context Propagation so you can propagate transactions, traceability data, and so on in your reactive pipeline.
+Last but not least, Mutiny has built-in integration with SmallRye Context Propagation so you can propagate transactions, traceability data, and so on in your reactive pipeline.
But enough talking, let's get our hands dirty!
@@ -608,16 +608,6 @@ public class FruitResource {
this.client = client;
}
- private void initdb() {
- client.query("DROP TABLE IF EXISTS fruits").execute()
- .flatMap(r -> client.query("CREATE TABLE fruits (id SERIAL PRIMARY KEY, name TEXT NOT NULL)").execute())
- .flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Kiwi')").execute())
- .flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Durian')").execute())
- .flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Pomelo')").execute())
- .flatMap(r -> client.query("INSERT INTO fruits (name) VALUES ('Lychee')").execute())
- .await().indefinitely();
- }
-
@GET
public Multi get() {
return Fruit.findAll(client);
@@ -755,13 +745,9 @@ import javax.ws.rs.core.MediaType;
@Path("/fruit-data")
public class ResourceUsingWebClient {
- @Inject
- Vertx vertx;
-
- private WebClient client;
+ private final WebClient client;
- @PostConstruct
- void initialize() {
+ public ResourceUsingWebClient(Vertx vertx) {
this.client = WebClient.create(vertx,
new WebClientOptions().setDefaultHost("fruityvice.com").setDefaultPort(443).setSsl(true)
.setTrustAll(true));
diff --git a/docs/src/main/asciidoc/gradle-tooling.adoc b/docs/src/main/asciidoc/gradle-tooling.adoc
index eb2f0361e6aad6..426860ee22c587 100644
--- a/docs/src/main/asciidoc/gradle-tooling.adoc
+++ b/docs/src/main/asciidoc/gradle-tooling.adoc
@@ -160,6 +160,7 @@ You can install all extensions which match a globbing pattern:
./gradlew addExtension --extensions="hibernate*"
----
+[[dev-mode]]
== Development mode
Quarkus comes with a built-in development mode.
diff --git a/docs/src/main/asciidoc/grpc-getting-started.adoc b/docs/src/main/asciidoc/grpc-getting-started.adoc
index e19de7e4cea905..8a082ab412500a 100644
--- a/docs/src/main/asciidoc/grpc-getting-started.adoc
+++ b/docs/src/main/asciidoc/grpc-getting-started.adoc
@@ -224,7 +224,8 @@ annotated method on a worker thread instead of the I/O thread (event-loop).
The services are _served_ by a _server_.
Available services (_CDI beans_) are automatically registered and exposed.
-By default, the server is exposed on `localhost:9000`, and uses _plain-text_ (so no TLS).
+By default, the server is exposed on `localhost:9000`, and uses _plain-text_ (so no TLS) when
+running normally, and `localhost:9001` for tests.
Run the application using: `mvn quarkus:dev`.
diff --git a/docs/src/main/asciidoc/hibernate-orm.adoc b/docs/src/main/asciidoc/hibernate-orm.adoc
index efa82492f36e77..24fc0747481c98 100644
--- a/docs/src/main/asciidoc/hibernate-orm.adoc
+++ b/docs/src/main/asciidoc/hibernate-orm.adoc
@@ -414,6 +414,7 @@ or jars, you can make sure that your jar is treated like a Quarkus application l
This will allow Quarkus to index and enhance your entities as if they were inside the current project.
+[[dev-mode]]]
== Hibernate ORM in development mode
Quarkus development mode is really useful for applications that mix front end or services and database access.
diff --git a/docs/src/main/asciidoc/http-reference.adoc b/docs/src/main/asciidoc/http-reference.adoc
index 5ff491113760d8..0c3f6807f3e7da 100644
--- a/docs/src/main/asciidoc/http-reference.adoc
+++ b/docs/src/main/asciidoc/http-reference.adoc
@@ -125,7 +125,7 @@ The password can be set in your `application.properties` (in plain-text) using t
quarkus.http.ssl.certificate.key-store-password=your-password
----
-However, instead of providing the password as plain-text in the configuration file (which is considered bad practice), it can instead be supplied (using link:https://microprofile.io/project/eclipse/microprofile-config[MicroProfile config])
+However, instead of providing the password as plain-text in the configuration file (which is considered bad practice), it can instead be supplied (using link:https://github.com/eclipse/microprofile-config[MicroProfile Config])
as the environment variable `QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_PASSWORD`.
This will also work in tandem with link:https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables[Kubernetes secrets].
diff --git a/docs/src/main/asciidoc/kafka-streams.adoc b/docs/src/main/asciidoc/kafka-streams.adoc
index 474774966661a1..fcc087a27d2a1b 100644
--- a/docs/src/main/asciidoc/kafka-streams.adoc
+++ b/docs/src/main/asciidoc/kafka-streams.adoc
@@ -1252,7 +1252,7 @@ content-length: 265
This guide has shown how you can build stream processing applications using Quarkus and the Kafka Streams APIs,
both in JVM and native modes.
For running your KStreams application in production, you could also add health checks and metrics for the data pipeline.
-Refer to the Quarkus guides on link:micrometer[Micrometer], link:microprofile-metrics[MicroProfile Metrics], and link:microprofile-health[health checks] to learn more.
+Refer to the Quarkus guides on link:micrometer[Micrometer], link:smallrye-metrics[SmallRye Metrics], and link:smallrye-health[SmallRye Health] to learn more.
== Configuration Reference
diff --git a/docs/src/main/asciidoc/kafka.adoc b/docs/src/main/asciidoc/kafka.adoc
index 553910a150c300..7a774e6e6c5e19 100644
--- a/docs/src/main/asciidoc/kafka.adoc
+++ b/docs/src/main/asciidoc/kafka.adoc
@@ -7,7 +7,7 @@ https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
include::./attributes.adoc[]
-This guide demonstrates how your Quarkus application can utilize MicroProfile Reactive Messaging to interact with Apache Kafka.
+This guide demonstrates how your Quarkus application can utilize SmallRye Reactive Messaging to interact with Apache Kafka.
== Prerequisites
@@ -1135,6 +1135,6 @@ Type: _boolean_ | false | `true`
== Going further
This guide has shown how you can interact with Kafka using Quarkus.
-It utilizes MicroProfile Reactive Messaging to build data streaming applications.
+It utilizes SmallRye Reactive Messaging to build data streaming applications.
If you want to go further check the documentation of https://smallrye.io/smallrye-reactive-messaging[SmallRye Reactive Messaging], the implementation used in Quarkus.
diff --git a/docs/src/main/asciidoc/kubernetes-client.adoc b/docs/src/main/asciidoc/kubernetes-client.adoc
index 5f0b86e57c9787..a14257d04fafea 100644
--- a/docs/src/main/asciidoc/kubernetes-client.adoc
+++ b/docs/src/main/asciidoc/kubernetes-client.adoc
@@ -113,11 +113,9 @@ public class KubernetesClientTest {
final Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
final Pod pod2 = new PodBuilder().withNewMetadata().withName("pod2").withNamespace("test").and().build();
- mockServer.expect().get().withPath("/api/v1/namespaces/test/pods")
- .andReturn(200,
- new PodListBuilder().withNewMetadata().withResourceVersion("1").endMetadata().withItems(pod1, pod2)
- .build())
- .always();
+ // Set up Kubernetes so that our "pretend" pods are created
+ mockServer.getClient().pods().create(pod1);
+ mockServer.getClient().pods().create(pod2);
}
@Test
@@ -140,6 +138,42 @@ Note that to take advantage of these features, the `quarkus-test-kubernetes-clie
----
+By default, the mock server will be in CRUD mode, so you have to use the client to build your state before your application can retrieve it,
+but you can also set it up in non-CRUD mode and mock all HTTP requests made to Kubernetes:
+
+[source%nowrap,java]
+----
+// you can even configure aspects like crud, https and port on this annotation
+@WithKubernetesTestServer(crud = false)
+@QuarkusTest
+public class KubernetesClientTest {
+
+ @KubernetesTestServer
+ KubernetesServer mockServer;
+
+ @BeforeEach
+ public void before() {
+ final Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").withNamespace("test").and().build();
+ final Pod pod2 = new PodBuilder().withNewMetadata().withName("pod2").withNamespace("test").and().build();
+
+ // Mock any HTTP request to Kubernetes pods so that our pods are returned
+ mockServer.expect().get().withPath("/api/v1/namespaces/test/pods")
+ .andReturn(200,
+ new PodListBuilder().withNewMetadata().withResourceVersion("1").endMetadata().withItems(pod1, pod2)
+ .build())
+ .always();
+ }
+
+ @Test
+ public void testInteractionWithAPIServer() {
+ RestAssured.when().get("/pod/test").then()
+ .body("size()", is(2));
+ }
+
+}
+----
+
+
Alternately, you can create a `CustomKubernetesMockServerTestResource.java` to ensure all your `@QuarkusTest` enabled test classes share the same mock server setup:
[source%nowrap,java]
diff --git a/docs/src/main/asciidoc/mailer.adoc b/docs/src/main/asciidoc/mailer.adoc
index 1c692d72cf0938..a03045f5619178 100644
--- a/docs/src/main/asciidoc/mailer.adoc
+++ b/docs/src/main/asciidoc/mailer.adoc
@@ -240,7 +240,7 @@ It's also possible to inject a mail template, where the message body is created
public class MailingResource {
@CheckedTemplate
- class Templates {
+ static class Templates {
public static native MailTemplateInstance hello(String name); <1>
}
@@ -312,6 +312,7 @@ public Uni send() { <1>
<1> The method returns a `Uni`
<2> Transform the `Uni` returned by `MailTemplate` into `Unit`
+[[testing]]]
== Testing email sending
Because it is very inconvenient to send emails during development and testing, you can set the `quarkus.mailer.mock` boolean
diff --git a/docs/src/main/asciidoc/maven-tooling.adoc b/docs/src/main/asciidoc/maven-tooling.adoc
index 0cfb5cf4abf0fc..bf0025aae2b394 100644
--- a/docs/src/main/asciidoc/maven-tooling.adoc
+++ b/docs/src/main/asciidoc/maven-tooling.adoc
@@ -125,6 +125,7 @@ You can install all extensions which match a globbing pattern :
./mvnw quarkus:add-extension -Dextensions="hibernate-*"
----
+[[dev-mode]]
== Development mode
Quarkus comes with a built-in development mode.
@@ -515,6 +516,7 @@ If you have not used <>, add the following
<5> Enable the `native` package type. The build will therefore produce a native executable.
<6> If you want to test your native executable with Integration Tests, add the following plugin configuration. Test names `*IT` and annotated `@NativeImageTest` will be run against the native executable. See the link:building-native-image[Native executable guide] for more info.
+[[fast-jar]]
=== Using fast-jar
`fast-jar` is now the default quarkus package type. The result of `./mvnw package` command is a new directory under `target` named `quarkus-app`.
diff --git a/docs/src/main/asciidoc/micrometer.adoc b/docs/src/main/asciidoc/micrometer.adoc
index 860e7c8c755a40..5981f1410bd61f 100644
--- a/docs/src/main/asciidoc/micrometer.adoc
+++ b/docs/src/main/asciidoc/micrometer.adoc
@@ -7,8 +7,8 @@ https://github.com/quarkusio/quarkus/tree/main/docs/src/main/asciidoc
include::./attributes.adoc[]
-This guide demonstrates how your Quarkus application can utilize the Micrometer
-metrics library for runtime and application metrics.
+This guide demonstrates how your Quarkus application can utilize the Micrometer metrics library for runtime and
+application metrics.
Apart from application-specific metrics, which are described in this guide, you may also utilize built-in metrics
exposed by various Quarkus extensions. These are described in the guide for each particular extension that supports
@@ -27,24 +27,34 @@ To complete this guide, you need:
== Architecture
-In this example, we build a very simple microservice which offers one REST endpoint and that determines
-if a number is prime.
+Micrometer defines a core library providing a registration mechanism for Metrics, and core metric types (Counters,
+Gauges, Timers, Distribution Summaries, etc.). These core types provide an abstraction layer that can be adapted to
+different backend monitoring systems. In essence, your application (or a library) can `register` a `Counter`,
+`Gauge`, `Timer`, or `DistributionSummary` with a `MeterRegistry`. Micrometer will then delegate that registration to
+one or more implementations, where each implementation handles the unique considerations for the associated
+monitoring stack.
+
+Micrometer uses naming conventions to translate between registered Meters and the conventions used by various backend
+registries. Meter names, for example, should be created and named using dots to separate segments, `a.name.like.this`.
+Micrometer then translates that name into the format that the selected registry prefers. Prometheus
+uses underscores, which means the previous name will appear as `a_name_like_this` in Prometheus-formatted metrics
+output.
== Solution
We recommend that you follow the instructions in the next sections and create the application step by step.
-However, you can go right to the completed example.
+You can skip right to the solution if you prefer. Either:
-Clone the Git repository: `git clone {quickstarts-clone-url}`, or download an {quickstarts-archive-url}[archive].
+* Clone the git repository: `git clone {quickstarts-clone-url}`, or
+* Download an {quickstarts-archive-url}[archive].
The solution is located in the `micrometer-quickstart` {quickstarts-tree-url}/micrometer-quickstart[directory].
== Creating the Maven Project
-Micrometer defines a core library and a set of additional libraries that support different monitoring systems.
-Quarkus Micrometer extensions are structured similarly: `quarkus-micrometer` provides core micrometer support and
-runtime integration and other supporting Quarkus and Quarkiverse extensions bring in additional dependencies
-and requirements to support specific monitoring systems.
+Quarkus Micrometer extensions are structured similarly to Micrometer itself: `quarkus-micrometer` provides core
+micrometer support and runtime integration and other Quarkus and Quarkiverse extensions bring in additional
+dependencies and requirements to support specific monitoring systems.
For this example, we'll use the Prometheus registry.
@@ -55,7 +65,7 @@ First, we need a new project. Create a new project with the following command:
mvn io.quarkus:quarkus-maven-plugin:{quarkus-version}:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=micrometer-quickstart \
- -DclassName="org.acme.micrometer.PrimeNumberResource" \
+ -DclassName="org.acme.micrometer.ExampleResource" \
-Dpath="/" \
-Dextensions="resteasy,micrometer-registry-prometheus"
cd micrometer-quickstart
@@ -85,15 +95,12 @@ This will add the following to your `pom.xml`:
== Writing the application
-The application consists of a single class that implements an algorithm for checking whether a number is prime.
-This algorithm is exposed over a REST interface. With the Micrometer extension enabled, metrics for all http
-server requests are collected automatically.
-
-We do want to add a few other metrics to demonstrate how those types work:
+Micrometer provides an API that allows you to construct your own custom metrics. The most common types of
+meters supported by monitoring systems are gauges, counters, and summaries. The following sections build
+an example endpoint, and observes endpoint behavior using these basic meter types.
-* A counter will be incremented for every prime number discovered
-* A gauge will store the highest prime number discovered
-* A timer will record the time spent testing if ia number is prime.
+To register meters, you need a reference to a `MeterRegistry`, which is configured and maintained by the Micrometer
+extension. The `MeterRegistry` can be injected into your application as follows:
[source,java]
----
@@ -105,183 +112,291 @@ import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import java.util.concurrent.atomic.LongAccumulator;
-import java.util.function.Supplier;
-@Path("/")
-public class PrimeNumberResource {
+@Path("/example")
+@Produces("text/plain")
+public class ExampleResource {
- private final LongAccumulator highestPrime = new LongAccumulator(Long::max, 0);
private final MeterRegistry registry;
- PrimeNumberResource(MeterRegistry registry) {
+ ExampleResource(MeterRegistry registry) {
this.registry = registry;
+ }
+}
+----
+
+Micrometer maintains an internal mapping between unique metric identifier and tag combinations and specific meter
+instances. Using `register`, `counter`, or other methods to increment counters or record values does not create
+a new instance of a meter unless that combination of identifier and tag/label values hasn't been seen before.
- // Create a gauge that uses the highestPrimeNumberSoFar method
- // to obtain the highest observed prime number
- registry.gauge("prime.number.max", this,
- PrimeNumberResource::highestObservedPrimeNumber);
+=== Gauges
+
+Gauges measure a value that can increase or decrease over time, like the speedometer on a car. Gauges can be
+useful when monitoring the statistics for a cache or collection. Consider the following simple example that
+observes the size of a list:
+
+[source,java]
+----
+ LinkedList list = new LinkedList<>();
+
+ // Update the constructor to create the gauge
+ ExampleResource(MeterRegistry registry) {
+ this.registry = registry;
+ registry.gaugeCollectionSize("example.list.size", Tags.empty(), list);
}
@GET
- @Path("/{number}")
- @Produces(MediaType.TEXT_PLAIN)
+ @Path("gauge/{number}")
+ public Long checkListSize(@PathParam("number") long number) {
+ if (number == 2 || number % 2 == 0) {
+ // add even numbers to the list
+ list.add(number);
+ } else {
+ // remove items from the list for odd numbers
+ try {
+ number = list.removeFirst();
+ } catch (NoSuchElementException nse) {
+ number = 0;
+ }
+ }
+ return number;
+ }
+----
+
+Note that even numbers are added to the list, and odd numbers remove an element from the list. Try the following
+sequence and look for `example_list_size` in the plain text output:
+
+[source,shell]
+----
+# Compile and run the app in dev mode:
+./mvnw compile quarkus:dev
+
+curl http://localhost:8080/example/gauge/1
+curl http://localhost:8080/example/gauge/2
+curl http://localhost:8080/example/gauge/4
+curl http://localhost:8080/q/metrics
+curl http://localhost:8080/example/gauge/6
+curl http://localhost:8080/example/gauge/5
+curl http://localhost:8080/example/gauge/7
+curl http://localhost:8080/q/metrics
+----
+
+It is important to note that gauges are sampled rather than set; there is no record of how the value associated with a
+gauge might have changed between measurements. In this example, the size of the list is observed when the Prometheus
+endpoint is visited.
+
+Micrometer provides a few additional mechanisms for creating gauges. Note that Micrometer does not create strong
+references to the objects it observes by default. Depending on the registry, Micrometer either omits gauges that observe
+objects that have been garbage-collected entirely or uses `NaN` (not a number) as the observed value.
+
+When should you use a Gauge? Only if you can't use something else. Never gauge something you can count. Gauges can be
+less straight-forward to use than counters. If what you are measuring can be counted (because the value always
+increments), use a counter instead.
+
+=== Counters
+
+Counters are used to measure values that only increase. In the example below, you will count the number of times you
+test a number to see if it is prime:
+
+[source,java]
+----
+ @GET
+ @Path("prime/{number}")
public String checkIfPrime(@PathParam("number") long number) {
if (number < 1) {
return "Only natural numbers can be prime numbers.";
}
- if (number == 1) {
- return "1 is not prime.";
- }
- if (number == 2) {
- return "2 is prime.";
- }
- if (number % 2 == 0) {
- return number + " is not prime, it is divisible by 2.";
+ if (number == 1 || number == 2 || number % 2 == 0) {
+ return number + " is not prime.";
}
- Supplier supplier = () -> {
- for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
- if (number % i == 0) {
- return number + " is not prime, is divisible by " + i + ".";
- }
- }
- highestPrime.accumulate(number);
+ if ( testPrimeNumber(number) ) {
return number + " is prime.";
- };
-
- return registry.timer("prime.number.test").wrap(supplier).get();
+ } else {
+ return number + " is not prime.";
+ }
}
- /**
- * This method is called by the registered {@code highest.prime.number} gauge.
- * @return the highest observed prime value
- */
- long highestObservedPrimeNumber() {
- return highestPrime.get();
+ protected boolean testPrimeNumber(long number) {
+ // Count the number of times we test for a prime number
+ registry.counter("example.prime.number").increment();
+ for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
+ if (number % i == 0) {
+ return false;
+ }
+ }
+ return true;
}
-}
----
-== Running and using the application
+It might be tempting to add a label or tag to the counter indicating what value was checked, but remember that each
+unique combination of metric name (`example.prime.number`) and label value produces a unique time series. Using an
+unbounded set of data as label values can lead to a "cardinality explosion", an exponential increase in the creation
+of new time series.
-To run the microservice in dev mode, use `./mvnw clean compile quarkus:dev`
+[NOTE]
+====
+Label and tag can be used interchangably. You may also see "attribute" used in this context in some documentation.
+The gist is each that each label or tag or attribute defines an additional bit of information associated with the
+single numerical measurement that helps you classify, group, or aggregate the measured value later. The Micrometer API
+uses `Tag` as the mechanism for specifying this additional data.
+====
-=== Generate some values for the metrics
+It is possible to add a tag that would convey a little more information, however. Let's adjust our code, and move
+the counter to add some tags to convey additional information.
-First, ask the endpoint whether some numbers are prime numbers.
+[source,java]
+----
+ @GET
+ @Path("prime/{number}")
+ public String checkIfPrime(@PathParam("number") long number) {
+ if (number < 1) {
+ registry.counter("example.prime.number", "type", "not-natural").increment();
+ return "Only natural numbers can be prime numbers.";
+ }
+ if (number == 1 ) {
+ registry.counter("example.prime.number", "type", "one").increment();
+ return number + " is not prime.";
+ }
+ if (number == 2 || number % 2 == 0) {
+ registry.counter("example.prime.number", "type", "even").increment();
+ return number + " is not prime.";
+ }
-[source,bash]
+ if ( testPrimeNumber(number) ) {
+ registry.counter("example.prime.number", "type", "prime").increment();
+ return number + " is prime.";
+ } else {
+ registry.counter("example.prime.number", "type", "not-prime").increment();
+ return number + " is not prime.";
+ }
+ }
+
+ protected boolean testPrimeNumber(long number) {
+ for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
+ if (number % i == 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+----
+
+Looking at the data produced by this counter, you can tell how often a negative number was checked, or the number one,
+or an even number, and so on. Try the following sequence and look for `example_prime_number_total` in the plain text
+output. Note that the `_total` suffix is added when Micrometer applies Prometheus naming conventions to
+`example.prime.number`, the originally specified counter name.
+
+[source,shell]
----
-curl localhost:8080/350
+# If you did not leave quarkus running in dev mode, start it again:
+./mvnw compile quarkus:dev
+
+curl http://localhost:8080/example/prime/-1
+curl http://localhost:8080/example/prime/0
+curl http://localhost:8080/example/prime/1
+curl http://localhost:8080/example/prime/2
+curl http://localhost:8080/example/prime/3
+curl http://localhost:8080/example/prime/15
+curl http://localhost:8080/q/metrics
----
-The application will respond that 350 is not a prime number because it can be divided by 2.
+When should you use a counter? Only if you are doing something that can not be either timed (or summarized).
+Counters only record a count, which may be all that is needed. However, if you want to understand more about how a
+value is changing, a timer (when the base unit of measurement is time) or a distribution summary might be
+more appropriate.
-Now for some large prime number so that the test takes a bit more time:
+=== Summaries and Timers
-[source,bash]
+Timers and distribution summaries in Micrometer are very similar. Both allow you to record an observed value, which
+will be aggregated with other recorded values and stored as a sum. Micrometer also increments a counter to indicate the
+number of measurements that have been recorded and tracks the maximum observed value (within a decaying interval).
+
+Distribution summaries are populated by calling the `record` method to record observed values, while timers provide
+additional capabilities specific to working with time and measuring durations. For example, we can use a timer to
+measure how long it takes to calculate prime numbers using one of the `record` methods that wraps the invocation of a
+Supplier function:
+
+[source,java]
+----
+ protected boolean testPrimeNumber(long number) {
+ Timer timer = registry.timer("example.prime.number.test");
+ return timer.record(() -> {
+ for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
+ if (number % i == 0) {
+ return false;
+ }
+ }
+ return true;
+ });
+ }
----
-curl localhost:8080/629521085409773
+
+Micrometer will apply Prometheus conventions when emitting metrics for this timer. Prometheus measures time in seconds.
+Micrometer converts measured durations into seconds and includes the unit in the metric name, per convention. After
+visiting the prime endpoint a few more times, look in the plain text output for the following three entries:
+`example_prime_number_test_seconds_count`, `example_prime_number_test_seconds_sum`, and
+`example_prime_number_test_seconds_max`.
+
+[source,shell]
----
+# If you did not leave quarkus running in dev mode, start it again:
+./mvnw compile quarkus:dev
-The application will respond that 629521085409773 is a prime number.
-If you want, try some more calls with numbers of your choice.
+curl http://localhost:8080/example/prime/256
+curl http://localhost:8080/q/metrics
+curl http://localhost:8080/example/prime/7919
+curl http://localhost:8080/q/metrics
+----
-=== Review the generated metrics
+Both timers and distribution summaries can be configured to emit additional statistics, like histogram data,
+precomputed percentiles, or service level objective (SLO) boundaries. Note that the count, sum, and histogram data
+can be re-aggregated across dimensions (or across a series of instances), while precomputed percentile values cannot.
-To view the metrics, execute `curl localhost:8080/q/metrics/`
+=== Review automatically generated metrics
-Prometheus-formatted metrics will be returned in plain text in no particular order.
+To view metrics, execute `curl localhost:8080/q/metrics/`
-The application above has only one custom gauge that measures the time
-spent determining whether or not a number is prime. The Micrometer extension
-enables additional system, jvm, and http metrics. A subset of the collected metrics
-are shown below.
+The Micrometer extension automatically times HTTP server requests. Following Prometheus naming conventions for
+timers, look for `http_server_requests_seconds_count`, `http_server_requests_seconds_sum`, and
+`http_server_requests_seconds_max`. Dimensional labels have been added for the requested uri, the HTTP method
+(GET, POST, etc.), the status code (200, 302, 404, etc.), and a more general outcome field.
[source,text]
----
# HELP http_server_requests_seconds
# TYPE http_server_requests_seconds summary
-http_server_requests_seconds_count{method="GET",outcome="SUCCESS",status="200",uri="/{number}",} 4.0
-http_server_requests_seconds_sum{method="GET",outcome="SUCCESS",status="200",uri="/{number}",} 0.041501773
+http_server_requests_seconds_count{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 1.0
+http_server_requests_seconds_sum{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 0.017385896
# HELP http_server_requests_seconds_max
# TYPE http_server_requests_seconds_max gauge
-http_server_requests_seconds_max{method="GET",outcome="SUCCESS",status="200",uri="/{number}",} 0.038066359
-# HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset
-# TYPE jvm_threads_peak_threads gauge
-jvm_threads_peak_threads 56.0
-# HELP http_server_connections_seconds_max
-# TYPE http_server_connections_seconds_max gauge
-http_server_connections_seconds_max 0.102580737
-# HELP http_server_connections_seconds
-# TYPE http_server_connections_seconds summary
-http_server_connections_seconds_active_count 5.0
-http_server_connections_seconds_duration_sum 0.175032815
-# HELP system_load_average_1m The sum of the number of runnable entities queued to available processors and the number of runnable entities running on the available processors averaged over a period of time
-# TYPE system_load_average_1m gauge
-system_load_average_1m 2.4638671875
-# HELP http_server_bytes_written_max
-# TYPE http_server_bytes_written_max gauge
-http_server_bytes_written_max 39.0
-# HELP http_server_bytes_written
-# TYPE http_server_bytes_written summary
-http_server_bytes_written_count 4.0
-http_server_bytes_written_sum 99.0
-# HELP jvm_classes_loaded_classes The number of classes that are currently loaded in the Java virtual machine
-# TYPE jvm_classes_loaded_classes gauge
-jvm_classes_loaded_classes 9341.0
-# HELP prime_number_max
-# TYPE prime_number_max gauge
-prime_number_max 887.0
-# HELP jvm_info JVM version info
-# TYPE jvm_info gauge
-jvm_info{runtime="OpenJDK Runtime Environment",vendor="Oracle Corporation",version="13.0.2+8",} 1.0
-# HELP jvm_classes_unloaded_classes_total The total number of classes unloaded since the Java virtual machine has started execution
-# TYPE jvm_classes_unloaded_classes_total counter
-jvm_classes_unloaded_classes_total 28.0
-# HELP prime_number_test_seconds
-# TYPE prime_number_test_seconds summary
-prime_number_test_seconds_count 3.0
-prime_number_test_seconds_sum 1.94771E-4
-# HELP prime_number_test_seconds_max
-# TYPE prime_number_test_seconds_max gauge
-prime_number_test_seconds_max 1.76162E-4
-# HELP http_server_bytes_read
-# TYPE http_server_bytes_read summary
-http_server_bytes_read_count 4.0
-http_server_bytes_read_sum 0.0
-# HELP http_server_bytes_read_max
-# TYPE http_server_bytes_read_max gauge
-http_server_bytes_read_max 0.0
-# HELP jvm_threads_states_threads The current number of threads having NEW state
-# TYPE jvm_threads_states_threads gauge
-jvm_threads_states_threads{state="runnable",} 37.0
-jvm_threads_states_threads{state="blocked",} 0.0
-jvm_threads_states_threads{state="waiting",} 15.0
-jvm_threads_states_threads{state="timed-waiting",} 4.0
-jvm_threads_states_threads{state="new",} 0.0
-jvm_threads_states_threads{state="terminated",} 0.0
-# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
-# TYPE jvm_buffer_memory_used_bytes gauge
-jvm_buffer_memory_used_bytes{id="mapped",} 0.0
-jvm_buffer_memory_used_bytes{id="direct",} 149521.0
-# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
-# TYPE jvm_memory_committed_bytes gauge
-jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'profiled nmethods'",} 1.1403264E7
-jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 4194304.0
-jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 9.2274688E7
-jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.9803264E7
-jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 2555904.0
-jvm_memory_committed_bytes{area="heap",id="G1 Eden Space",} 6.9206016E7
-jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 6815744.0
-jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-profiled nmethods'",} 2555904.0
+http_server_requests_seconds_max{method="GET",outcome="SUCCESS",status="200",uri="/example/prime/{number}",} 0.017385896
+#
----
Note that metrics appear lazily, you often won't see any data for your endpoint until
something tries to access it, etc.
+.Ignoring endpoints
+
+You can disable measurement of HTTP endpoints using the `quarkus.micrometer.binder.http-server.ignore-patterns`
+property. This property accepts a comma-separated list of simple regex match patterns identifying URI paths that should
+be ignored. For example, setting `quarkus.micrometer.binder.http-server.ignore-patterns=/example/prime/[0-9]+` will
+ignore a request to `http://localhost:8080/example/prime/7919`. A request to `http://localhost:8080/example/gauge/7919`
+would still be measured.
+
+.URI templates
+
+The micrometer extension will make a best effort at representing URIs containing path parameters in templated form.
+Using examples from above, a request to `http://localhost:8080/example/prime/7919` should appear as an attribute of
+`http_server_requests_seconds_*` metrics with a value of `uri=/example/prime/{number}`.
+
+Use the `quarkus.micrometer.binder.http-server.match-patterns` property if the correct URL can not be determined. This
+property accepts a comma-separated list defining an association between a simple regex match pattern and a replacement
+string. For example, setting
+`quarkus.micrometer.binder.http-server.match-patterns=/example/prime/[0-9]+=/example/{jellybeans}` would use the value
+`/example/{jellybeans}` for the uri attribute any time the requested uri matches `/example/prime/[0-9]+`.
+
== Using MeterFilter to configure metrics
Micrometer uses `MeterFilter` instances to customize the metrics emitted by `MeterRegistry` instances.
@@ -337,6 +452,17 @@ public class CustomConfiguration {
In this example, a singleton CDI bean will produce two different `MeterFilter` beans. One will be applied only to
Prometheus `MeterRegistry` instances (using the `@MeterFilterConstraint` qualifier), and another will be applied
to all `MeterRegistry` instances. An application configuration property is also injected and used as a tag value.
+Additional examples of MeterFilters can be found in the
+link:https://micrometer.io/docs/concepts[official documentation].
+
+== Does Micrometer support annotations?
+
+Micrometer does define two annotations, `@Counted` and `@Timed`, that can be added to methods. The `@Timed` annotation
+will wrap the execution of a method and will emit the following tags in addition to any tags defined on the
+annotation itself: class, method, and exception (either "none" or the simple class name of a detected exception).
+
+Using annotations is limited, as you can't dynamically assign meaningful tag values. Also note that many methods, e.g.
+REST endpoint methods or Vert.x Routes, are counted and timed by the micrometer extension out of the box.
== Using other Registry implementations
@@ -406,24 +532,25 @@ that are integrated with the Quarkus configuration model.
If you use the MicroProfile Metrics API in your application, the Micrometer extension will create an adaptive
layer to map those metrics into the Micrometer registry. Note that naming conventions between the two
-systems will change, but you can use MeterFilters to remap names or tags to what your dashboards require.
+systems is different, so the metrics that are emitted when using MP Metrics with Micrometer will change.
+You can use a `MeterFilter` to remap names or tags according to your conventions.
[source,java]
----
@Produces
@Singleton
public MeterFilter renameApplicationMeters() {
- final String targetMetric = PrimeResource.class.getName() + ".highestPrimeNumberSoFar";
+ final String targetMetric = MPResourceClass.class.getName() + ".mpAnnotatedMethodName";
return MeterFilter() {
@Override
public Meter.Id map(Meter.Id id) {
- // rename the specified metric (remove package), and drop the scope tag
- // you could also use this to prepend a scope tag (application, base, vendor, if present) to the metric name
if (id.getName().equals(targetMetric)) {
+ // Drop the scope tag (MP Registry type: application, vendor, base)
List tags = id.getTags().stream().filter(x -> !"scope".equals(x.getKey()))
.collect(Collectors.toList());
- return id.withName("highestPrimeNumberSoFar").replaceTags(tags);
+ // rename the metric
+ return id.withName("my.metric.name").replaceTags(tags);
}
return id;
}
@@ -431,6 +558,16 @@ public MeterFilter renameApplicationMeters() {
}
----
+Ensure the following dependency is present in your `pom.xml` file if you require the Microprofile Metrics API:
+
+[source,xml]
+----
+
+ org.eclipse.microprofile.metrics
+ microprofile-metrics-api
+
+----
+
NOTE: The MP Metrics API compatibility layer will be moved to a different extension in the future.
== Configuration Reference
diff --git a/docs/src/main/asciidoc/mongodb-panache.adoc b/docs/src/main/asciidoc/mongodb-panache.adoc
index bb1d3e2d90ca5c..66dcb011f6ccb1 100644
--- a/docs/src/main/asciidoc/mongodb-panache.adoc
+++ b/docs/src/main/asciidoc/mongodb-panache.adoc
@@ -656,7 +656,11 @@ quarkus.log.category."io.quarkus.mongodb.panache.runtime".level=DEBUG
== Transactions
-WARNING: MongoDB offers ACID transactions since version 4.0. MongoDB with Panache doesn't provide support for them.
+MongoDB offers ACID transactions since version 4.0.
+
+To use them with MongoDB with Panache you need to annotate the method that starts the transaction with the `@Transactional` annotation.
+
+WARNING: Transaction support inside MongoDB with Panache is still experimental.
== Custom IDs
@@ -890,6 +894,8 @@ public Multi streamPersons() {
TIP: `@SseElementType(MediaType.APPLICATION_JSON)` tells RESTEasy to serialize the object in JSON.
+WARNING: Transactions are not supported for Reactive Entities and Repositories.
+
== Mocking
=== Using the active-record pattern
diff --git a/docs/src/main/asciidoc/openapi-swaggerui.adoc b/docs/src/main/asciidoc/openapi-swaggerui.adoc
index 0b973fc5d1cb18..289e4d6f0e2a75 100644
--- a/docs/src/main/asciidoc/openapi-swaggerui.adoc
+++ b/docs/src/main/asciidoc/openapi-swaggerui.adoc
@@ -173,8 +173,10 @@ public class FruitResourceTest {
== Expose OpenAPI Specifications
-Quarkus proposes a `smallrye-openapi` extension compliant with the https://github.com/eclipse/microprofile-open-api/[Eclipse MicroProfile OpenAPI]
-specification in order to generate your API https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md[OpenAPI v3 specification].
+Quarkus provides the https://github.com/smallrye/smallrye-open-api/[Smallrye OpenAPI] extension compliant with the
+https://github.com/eclipse/microprofile-open-api/[MicroProfile OpenAPI]
+specification in order to generate your API
+https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md[OpenAPI v3 specification].
You just need to add the `openapi` extension to your Quarkus application:
@@ -439,6 +441,7 @@ Now you do not need to use the `@Operation` annotation. While generating the doc
|Use the class name plus the method name.
|===
+[[dev-mode]]]
== Use Swagger UI for development
When building APIs, developers want to test them quickly. https://swagger.io/tools/swagger-ui/[Swagger UI] is a great tool
diff --git a/docs/src/main/asciidoc/opentracing.adoc b/docs/src/main/asciidoc/opentracing.adoc
index faa47e513156c1..5dd2f855ab6822 100644
--- a/docs/src/main/asciidoc/opentracing.adoc
+++ b/docs/src/main/asciidoc/opentracing.adoc
@@ -100,7 +100,9 @@ public class TracedResource {
----
Notice that there is no tracing specific code included in the application. By default, requests sent to this
-endpoint will be traced without any code changes being required. It is also possible to enhance the tracing information. For more information on this, please see the https://github.com/eclipse/microprofile-opentracing/blob/master/spec/src/main/asciidoc/microprofile-opentracing.asciidoc[MicroProfile OpenTracing specification].
+endpoint will be traced without any code changes being required. It is also possible to enhance the tracing information.
+This can be achieved by https://github.com/smallrye/smallrye-opentracing/[SmallRye OpenTracing] an implementation of
+https://github.com/eclipse/microprofile-opentracing/[MicroProfile OpenTracing].
=== Create the configuration
@@ -168,7 +170,7 @@ Hit `CTRL+C` to stop the application.
== Tracing additional methods
REST endpoints are automatically traced.
-If you need to trace additional methods, you can use the `org.eclipse.microprofile.opentracing.Traced` annotation at class or method level.
+If you need to trace additional methods, you can add the `org.eclipse.microprofile.opentracing.Traced` annotation to CDI bean classes or their non-private methods.
This can be useful to trace incoming requests from non-REST calls (like request coming from a message) or to create spans inside a trace.
@@ -190,7 +192,7 @@ public class FrancophoneService {
}
----
-NOTE: the best way to add OpenTracing capability to reactive messaging based applications is by adding the `Traced` annotation to all incoming methods.
+NOTE: The best way to add OpenTracing capability to reactive messaging based applications is by adding the `Traced` annotation to all incoming methods.
== Additional instrumentation
diff --git a/docs/src/main/asciidoc/platform.adoc b/docs/src/main/asciidoc/platform.adoc
index 084344e1ab804f..f137389f95b1d8 100644
--- a/docs/src/main/asciidoc/platform.adoc
+++ b/docs/src/main/asciidoc/platform.adoc
@@ -90,7 +90,7 @@ The platform descriptor will normally be generated using a Maven plugin, e.g.
A Quarkus platform may provide its own default values for some of the configuration options.
-Quarkus is using https://github.com/eclipse/microprofile-config[Eclipse MicroProfile Config] for wiring application configuration. A Quarkus platform may be used as another source of configuration in the hierarchy of the configuration sources dominated by the application's `application.properties`.
+Quarkus is using https://github.com/smallrye/smallrye-config[SmallRye Config] for wiring application configuration. A Quarkus platform may be used as another source of configuration in the hierarchy of the configuration sources dominated by the application's `application.properties`.
To provide platform-specific defaults, the platform needs to include a dependency version constraint in its BOM for a properties artifact whose coordinates follow the following naming convention:
@@ -188,4 +188,4 @@ For example, the `quarkus-universe-bom` platform is based on the `quarkus-bom` p
----
-That way, the `quarkus-universe-bom` platform properties will appear before the `quarkus-bom` platform properties and so will be dominating during merging.
\ No newline at end of file
+That way, the `quarkus-universe-bom` platform properties will appear before the `quarkus-bom` platform properties and so will be dominating during merging.
diff --git a/docs/src/main/asciidoc/qute-reference.adoc b/docs/src/main/asciidoc/qute-reference.adoc
index ec15b22043500e..3d6ff364bdba4e 100644
--- a/docs/src/main/asciidoc/qute-reference.adoc
+++ b/docs/src/main/asciidoc/qute-reference.adoc
@@ -831,27 +831,26 @@ Template inheritance makes it possible to reuse template layouts.
{#insert title}Default Title{/} <1>
- {#insert body}No body!{/} <2>
+ {#insert}No body!{/} <2>