diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index dd44deff86c634..f71d7c928fd05b 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -157,6 +157,7 @@
2.14.0
2.2.0
1.0.0
+ 0.27.0
1.8.10
1.6.4
1.5.0
@@ -6056,7 +6057,26 @@
azure-functions-java-spi
${azure-functions-java-spi.version}
-
+
+ com.microsoft.azure
+ azure-toolkit-common-lib
+ ${azure.toolkit-lib.version}
+
+
+ com.microsoft.azure
+ azure-toolkit-auth-lib
+ ${azure.toolkit-lib.version}
+
+
+ com.microsoft.azure
+ azure-toolkit-appservice-lib
+ ${azure.toolkit-lib.version}
+
+
+ com.microsoft.azure
+ azure-toolkit-applicationinsights-lib
+ ${azure.toolkit-lib.version}
+
org.apache.maven.shared
maven-invoker
diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildException.java b/core/builder/src/main/java/io/quarkus/builder/BuildException.java
index 3f0b8bd3f5857c..abcb382d5fb160 100644
--- a/core/builder/src/main/java/io/quarkus/builder/BuildException.java
+++ b/core/builder/src/main/java/io/quarkus/builder/BuildException.java
@@ -1,5 +1,6 @@
package io.quarkus.builder;
+import java.util.Collections;
import java.util.List;
import org.wildfly.common.Assert;
@@ -25,6 +26,16 @@ public BuildException(final List diagnostics) {
this.diagnostics = diagnostics;
}
+ /**
+ * Constructs a new {@code DeploymentException} instance. The diagnostics is left blank ({@code null}), and no
+ * cause is specified.
+ *
+ * @param msg the message
+ */
+ public BuildException(String msg) {
+ this(msg, Collections.emptyList());
+ }
+
/**
* Constructs a new {@code DeploymentException} instance with an initial message. No
* cause is specified.
diff --git a/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionBuildItem.java b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionBuildItem.java
new file mode 100644
index 00000000000000..8774f1ccf58fe3
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionBuildItem.java
@@ -0,0 +1,21 @@
+package io.quarkus.deployment.cmd;
+
+import io.quarkus.builder.item.MultiBuildItem;
+
+public final class DeployCommandActionBuildItem extends MultiBuildItem {
+ private final String commandName;
+ private final boolean successful;
+
+ public DeployCommandActionBuildItem(String commandName, boolean successful) {
+ this.commandName = commandName;
+ this.successful = successful;
+ }
+
+ public String getCommandName() {
+ return commandName;
+ }
+
+ public boolean isSuccessful() {
+ return successful;
+ }
+}
diff --git a/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionResultBuildItem.java b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionResultBuildItem.java
new file mode 100644
index 00000000000000..57ab937bb58d2d
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandActionResultBuildItem.java
@@ -0,0 +1,17 @@
+package io.quarkus.deployment.cmd;
+
+import java.util.List;
+
+import io.quarkus.builder.item.SimpleBuildItem;
+
+public final class DeployCommandActionResultBuildItem extends SimpleBuildItem {
+ private final List commands;
+
+ public DeployCommandActionResultBuildItem(List commands) {
+ this.commands = commands;
+ }
+
+ public List getCommands() {
+ return commands;
+ }
+}
diff --git a/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationBuildItem.java b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationBuildItem.java
new file mode 100644
index 00000000000000..f4cb79572d5726
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationBuildItem.java
@@ -0,0 +1,19 @@
+package io.quarkus.deployment.cmd;
+
+import io.quarkus.builder.item.MultiBuildItem;
+
+/**
+ * Way for maven and gradle plugins to discover if any declared extensions
+ * support quarkus deploy
+ */
+public final class DeployCommandDeclarationBuildItem extends MultiBuildItem {
+ private final String name;
+
+ public DeployCommandDeclarationBuildItem(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationHandler.java b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationHandler.java
new file mode 100644
index 00000000000000..ac4112417d8080
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkus/deployment/cmd/DeployCommandDeclarationHandler.java
@@ -0,0 +1,21 @@
+package io.quarkus.deployment.cmd;
+
+import java.util.List;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+
+import io.quarkus.builder.BuildResult;
+
+public class DeployCommandDeclarationHandler implements BiConsumer