Quarkus is the bright new star in the cloud-native App Dev universe! Quarkus is Red Hat’s upstream stack for Kubernetes native Java. Its characteristics are simple:
- Quarkus is small!
- Quarkus is fast!
- Quarkus is familiar!
… and Quarkus makes Java relevant again in the cloud-native world where everyone talks about lightweight architectures, event-driven paradigms, container platforms and languages other than Java. Why? Languages like Go and Node.js are supposed to fit better the requirements that come along with it.
Let’s see if this still holds true …
Getting Started – The Quarkus Maven Plugin
Let’s get started and let’s create an example from scratch. We first start with … hmmmm … what’s exactly our first step? Copy a skeleton from some older project? Search the web for some examples? Tailor the copied code until it fits our needs? Crossing fingers to hit a current Maven POM with the latest dependencies? But is it exactly what we need?
Quarkus was built with Developer Joy in mind! We simply do what a developer is used to do: use Maven! Quarkus provides you a Maven plugin to make your life easier:
mvn io.quarkus:quarkus-maven-plugin:1.9.0.Final:help
Code language: CSS (css)
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:help (default-cli) @ standalone-pom ---
[INFO] Quarkus - Maven Plugin 1.9.0.Final
Build parent to bring in required dependencies
This plugin has 18 goals:
quarkus:add-extension
Allow adding an extension to an existing pom.xml file. Because you can add one
or several extension in one go, there are 2 mojos: add-extensions and
add-extension. Both supports the extension and extensions parameters.
quarkus:add-extensions
Allow adding extensions to an existing pom.xml file. Because you can add one
or several extension in one go, there are 2 mojos: add-extensions and
add-extension. Both supports the extension and extensions parameters.
quarkus:analyze-call-tree
Analyze call tree of a method or a class based on an existing report produced
by Substrate when using -H:+PrintAnalysisCallTree, and does a more meaningful
analysis of what is causing a type to be retained.
quarkus:build
Build the application.
You can build a native application runner with native-image
quarkus:create
This goal helps in setting up Quarkus Maven project with quarkus-maven-plugin,
with sensible defaults
quarkus:create-extension
Creates a triple of stub Maven modules (Parent, Runtime and Deployment) to
implement a new Quarkus Extension.
Adding into an established source tree
If this Mojo is executed in a directory that contains a pom.xml file with
packaging pom the newly created Parent module is added as a child module to
the existing pom.xml file.
Creating a source tree from scratch
Executing this Mojo in an empty directory is not supported yet.
quarkus:dev
The dev mojo, that runs a quarkus app in a forked process. A background
compilation process is launched and any changes are automatically reflected in
your running application.
You can use this dev mode in a remote container environment with remote-dev.
quarkus:generate-code
quarkus:generate-code-tests
quarkus:generate-config
Generates an example application-config.properties, with all properties
commented out If this is already present then it will be appended too,
although only properties that were not already present
quarkus:help
Display help information on quarkus-maven-plugin.
Call mvn quarkus:help -Ddetail=true -Dgoal=<goal-name> to display parameter
details.
quarkus:list-extensions
List the available extensions. You can add one or several extensions in one
go, with the 2 following mojos: add-extensions and add-extension. You can list
all extension or just installable. Choose between 3 output formats: name,
concise and full.
quarkus:native-image
Deprecated. No reason given
quarkus:prepare
quarkus:prepare-tests
quarkus:remote-dev
The dev mojo, that connects to a remote host.
quarkus:remove-extension
Allow removing an extension from an existing pom.xml file. Because you can
remove one or several extension in one go, there are 2 mojos:
remove-extensions and remove-extension. Both supports the extension and
extensions parameters.
quarkus:remove-extensions
Allow removing extensions to an existing pom.xml file. Because you can remove
one or several extension in one go, there are 2 mojos: remove-extensions and
remove-extension. Both supports the extension and extensions parameters.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.982 s
[INFO] Finished at: 2020-10-23T16:31:54+02:00
[INFO] ------------------------------------------------------------------------
Code language: CSS (css)
If you need more information for each of the Maven goals you can use this command to get detailed output:
mvn quarkus:help -Ddetail=true -Dgoal=<goal-name>
Code language: JavaScript (javascript)
The create Maven goal simply allows us to create a skeleton project which is tailored to our use case:
mvn io.quarkus:quarkus-maven-plugin:1.9.0.Final:create \
-DprojectGroupId=com.redhat \
-DprojectArtifactId=greeting-quarkus \
-DprojectVersion=1.0-SNAPSHOT \
-DclassName="com.redhat.GreetingResource"
Code language: PHP (php)
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:create (default-cli) @ standalone-pom ---
[INFO]
[INFO] Maven Wrapper version 0.5.6 has been successfully set up for your project.
[INFO] Using Apache Maven: 3.6.3
[INFO] Repo URL in properties file: https://repo.maven.apache.org/maven2
[INFO]
[INFO]
[INFO] ========================================================================================
[INFO] Your new application has been created in /home/torben/development/greeting-quarkus
[INFO] Navigate into this directory and launch your application with mvn quarkus:dev
[INFO] Your application will be accessible on http://localhost:8080
[INFO] ========================================================================================
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.400 s
[INFO] Finished at: 2020-10-23T16:29:36+02:00
[INFO] ------------------------------------------------------------------------
Code language: CSS (css)
You can also use the graphical tool at https://code.quarkus.io/ as an alternative to create such a skeleton project.
Ready For Hacking – The Live Coding Mode
One of the adorable features among a few others is the live coding mode. Literally speaking this is a shortcut from the unpopular code-compile-stop-deploy-restart-test cycle to just code-and-test!
This is by far not limited to just strings. It also includes structural changes to a class, changes to the Maven POM or adding properties to the one and only single properties file for configuration.
We all know and remember the times when we devs complained about slow hardware, CPU upgrades badly needed, regular SSDs too slow, NVMe is the new standard! Or my all time favourite: “There’s not enough time for writing automated tests! Schedule’s too tight, dev lifecycle takes too much time!”, etc. Sounds familiar?
Sorry folks! No excuses anymore!
Open to the world – OpenShift Deployment Made Easy
Once we’re done with local development we are gonna deploy it to a Kubernetes driven platform.
“But, wait!??!! Kubernetes? I’ve heard there’s a lot of YAML to hack before being able to deploy to such environments.” And yes, you’re right, but Quarkus is here to help you out:
We need to add a dependency to our project which will take care of all the Kubernetes YAML stuff:
./mvnw quarkus:add-extension -Dextension=openshift
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.redhat:greeting-quarkus >---------------------
[INFO] Building greeting-quarkus 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:add-extension (default-cli) @ greeting-quarkus ---
✅ Extension io.quarkus:quarkus-openshift has been installed
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.357 s
[INFO] Finished at: 2020-10-23T21:33:44+02:00
[INFO] ------------------------------------------------------------------------
Code language: CSS (css)
Then we’re going to create a new project in OpenShift:
oc new-project greeting
Code language: JavaScript (javascript)
Now using project "greeting" on server "https://api.cloud.cligg.me:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app ruby~https://github.com/sclorg/ruby-ex.git
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Code language: JavaScript (javascript)
After we have created our namespace on OpenShift we are now ready to start the deployment. This is as easy as using this ordinary Maven command:
./mvnw clean package -Dquarkus.kubernetes.deploy=true
Code language: JavaScript (javascript)
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.redhat:greeting-quarkus >---------------------
[INFO] Building greeting-quarkus 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ greeting-quarkus ---
[INFO] Deleting /home/torben/development/greeting-quarkus/target
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:generate-code (default) @ greeting-quarkus ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ greeting-quarkus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ greeting-quarkus ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/torben/development/greeting-quarkus/target/classes
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:generate-code-tests (default) @ greeting-quarkus ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ greeting-quarkus ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/torben/development/greeting-quarkus/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ greeting-quarkus ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /home/torben/development/greeting-quarkus/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ greeting-quarkus ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.redhat.GreetingResourceTest
2020-10-23 21:54:23,936 WARN [io.qua.config] (main) Unrecognized configuration key "quarkus.kubernetes.deploy" was provided; it will be ignored; verify that the dependency extension for this configuration is set or you did not make a typo
2020-10-23 21:54:24,253 INFO [io.quarkus] (main) Quarkus 1.9.0.Final on JVM started in 1.439s. Listening on: http://0.0.0.0:8081
2020-10-23 21:54:24,253 INFO [io.quarkus] (main) Profile test activated.
2020-10-23 21:54:24,253 INFO [io.quarkus] (main) Installed features: [cdi, kubernetes, resteasy]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.279 s - in com.redhat.GreetingResourceTest
2020-10-23 21:54:25,503 INFO [io.quarkus] (main) Quarkus stopped in 0.036s
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ greeting-quarkus ---
[INFO] Building jar: /home/torben/development/greeting-quarkus/target/greeting-quarkus-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- quarkus-maven-plugin:1.9.0.Final:build (default) @ greeting-quarkus ---
[INFO] [org.jboss.threads] JBoss Threads version 3.1.1.Final
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Deploying target 'openshift' since it has the highest priority among the implicitly enabled deployment targets
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /home/torben/development/greeting-quarkus/target/greeting-quarkus-1.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeploy] Kubernetes API Server at 'https://api.cloud.cligg.me:6443/' successfully contacted.
[WARNING] [io.quarkus.kubernetes.deployment.KubernetesProcessor] No registry was set for the container image, so 'ImagePullPolicy' is being force-set to 'IfNotPresent'.
[INFO] Checking for existing resources in: /home/torben/development/greeting-quarkus/src/main/kubernetes.
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Performing openshift binary build with jar on server: https://api.cloud.cligg.me:6443/ in namespace:greeting.
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Applied: ImageStream greeting-quarkus
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Applied: ImageStream openjdk-11
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Applied: BuildConfig greeting-quarkus
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Receiving source from STDIN as archive ...
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Caching blobs under "/var/cache/blobs".
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Getting image source signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:fe52369f78c0954b0d74bda583fd6663df6d99ff904da578246f33b65c0c47ac
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:41e1474940d5ff346fa62b08d2edcf116482c0b9fdf549dd4ce3a9cfcf0d3fa2
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:396754cf27f9e418ecbecce2f78b337f7bae4b1cd33a7d1c8926c54898cadf2f
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying config sha256:e502114b0d20d65cbf149b45981f6abdce5594d6ead476dc45aa0e3ad0c26e76
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Writing manifest to image destination
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Storing signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Generating dockerfile with builder image registry.access.redhat.com/ubi8/openjdk-11@sha256:84915c452a97f8a45630944a03a2c2f362ddad712b5ebb470e22e8aa0b734552
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 1: FROM registry.access.redhat.com/ubi8/openjdk-11@sha256:84915c452a97f8a45630944a03a2c2f362ddad712b5ebb470e22e8aa0b734552
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 2: LABEL "io.openshift.s2i.destination"="/tmp" "io.openshift.build.image"="registry.access.redhat.com/ubi8/openjdk-11@sha256:84915c452a97f8a45630944a03a2c2f362ddad712b5ebb470e22e8aa0b734552" "io.openshift.build.source-location"="/tmp/build/inputs"
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 3: ENV OPENSHIFT_BUILD_NAME="greeting-quarkus-1" OPENSHIFT_BUILD_NAMESPACE="greeting"
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 4: USER root
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 5: COPY upload/src /tmp/src
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 6: RUN chown -R 185:0 /tmp/src
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 7: USER 185
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 8: RUN /usr/local/s2i/assemble
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] INFO S2I source build with plain binaries detected
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] INFO Copying binaries from /tmp/src to /deployments ...
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/greeting-quarkus-1.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/com.fasterxml.jackson.core.jackson-core-2.11.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/com.ibm.async.asyncutil-0.1.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/com.sun.activation.jakarta.activation-1.2.1.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-buffer-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-codec-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-codec-dns-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-codec-http-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-codec-http2-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-codec-socks-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-common-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-handler-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-handler-proxy-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-resolver-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-resolver-dns-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.netty.netty-transport-4.1.49.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.arc.arc-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-arc-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-bootstrap-runner-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-core-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-development-mode-spi-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-kubernetes-client-internal-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-netty-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-openshift-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-resteasy-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-resteasy-common-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-resteasy-server-common-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-security-runtime-spi-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-vertx-core-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.quarkus-vertx-http-1.9.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.quarkus.security.quarkus-security-1.1.3.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.common.smallrye-common-annotation-1.4.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.common.smallrye-common-classloader-1.4.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.common.smallrye-common-constraint-1.4.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.common.smallrye-common-expression-1.4.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.common.smallrye-common-function-1.4.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.config.smallrye-config-1.9.1.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.config.smallrye-config-common-1.9.1.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.smallrye.reactive.mutiny-0.9.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.vertx.vertx-auth-common-3.9.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.vertx.vertx-bridge-common-3.9.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.vertx.vertx-core-3.9.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.vertx.vertx-web-3.9.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/io.vertx.vertx-web-common-3.9.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.annotation.jakarta.annotation-api-1.3.5.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.ejb.jakarta.ejb-api-3.2.6.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.el.jakarta.el-api-3.0.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.enterprise.jakarta.enterprise.cdi-api-2.0.2.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.inject.jakarta.inject-api-1.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.interceptor.jakarta.interceptor-api-1.2.5.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.transaction.jakarta.transaction-api-1.3.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/jakarta.validation.jakarta.validation-api-2.0.2.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.eclipse.microprofile.config.microprofile-config-api-1.4.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.eclipse.microprofile.context-propagation.microprofile-context-propagation-api-1.0.1.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.graalvm.sdk.graal-sdk-20.2.0.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.logging.jboss-logging-3.4.1.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.logging.jboss-logging-annotations-2.1.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.logmanager.jboss-logmanager-embedded-1.0.5.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.resteasy.resteasy-core-4.5.8.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.resteasy.resteasy-core-spi-4.5.8.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.slf4j.slf4j-jboss-logging-1.2.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.spec.javax.ws.rs.jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.spec.javax.xml.bind.jboss-jaxb-api_2.3_spec-2.0.0.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.jboss.threads.jboss-threads-3.1.1.Final.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.ow2.asm.asm-8.0.1.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.reactivestreams.reactive-streams-1.0.3.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.slf4j.slf4j-api-1.7.30.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] target/lib/org.wildfly.common.wildfly-common-1.5.4.Final-format-001.jar
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 9: CMD /usr/local/s2i/run
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] STEP 10: COMMIT temp.builder.openshift.io/greeting/greeting-quarkus-1:4005ebb5
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Getting image source signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:f9ddbcc4e7954a705b700c35c5e5beceabd86af121a6e561d86437a8512a6be6
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:90c2e42f948b524cf98005073e0b0aa2065160abf9e8b314976c064e270d92ac
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:7b08010864ba4c7ce9dfe1b90244b459b77c0387051659d37454783d10ab1113
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:076c167f9549f813e80bc2580e6a3cda40e7318a74dd4fe02f894f7531c96d1a
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying config sha256:834f1cb1de5d781b9162050e7cda57aff8c8e712cb5ceed394bf4aacb2e0b44c
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Writing manifest to image destination
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Storing signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] --> 834f1cb1de5
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] 834f1cb1de5d781b9162050e7cda57aff8c8e712cb5ceed394bf4aacb2e0b44c
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Getting image source signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor]
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Pushing image image-registry.openshift-image-registry.svc:5000/greeting/greeting-quarkus:1.0-SNAPSHOT ...
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:41e1474940d5ff346fa62b08d2edcf116482c0b9fdf549dd4ce3a9cfcf0d3fa2
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:396754cf27f9e418ecbecce2f78b337f7bae4b1cd33a7d1c8926c54898cadf2f
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:fe52369f78c0954b0d74bda583fd6663df6d99ff904da578246f33b65c0c47ac
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying blob sha256:076c167f9549f813e80bc2580e6a3cda40e7318a74dd4fe02f894f7531c96d1a
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Copying config sha256:834f1cb1de5d781b9162050e7cda57aff8c8e712cb5ceed394bf4aacb2e0b44c
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Writing manifest to image destination
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Storing signatures
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Successfully pushed image-registry.openshift-image-registry.svc:5000/greeting/greeting-quarkus@sha256:fd4a506590b7bd18dc787786142861856890a3dcd4ad2ba37a785abc276e98b7
[INFO] [io.quarkus.container.image.openshift.deployment.OpenshiftProcessor] Push successful
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Deploying to openshift server: https://api.cloud.cligg.me:6443/ in namespace: greeting.
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: Service greeting-quarkus.
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: ImageStream greeting-quarkus.
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: ImageStream openjdk-11.
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: BuildConfig greeting-quarkus.
[INFO] [io.quarkus.kubernetes.deployment.KubernetesDeployer] Applied: DeploymentConfig greeting-quarkus.
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 49942ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 58.573 s
[INFO] Finished at: 2020-10-23T21:55:15+02:00
[INFO] ------------------------------------------------------------------------
Code language: JavaScript (javascript)
In around 60 seconds you made your service available globally without hacking a single line of YAML. I’d call that a piece of cake!
You might say: “I don’t have OpenShift!”
No worries! We’ve got you covered. There are multiple options to even get you started for free. Please check out all options at https://www.openshift.com/try
See you next time
Next post will be about the Quarkus extensions and how they can help you in easily leveraging the benefits of using a Kubernetes orchestration engine like OpenShift.
Please let us know if you want to read about something specifically. We do our best to incorporate that into our publishing plan.
Till then, stay safe, take care, good bye!
3 replies on “How to accelerate your cloud-native AppDev with knative Java and OpenShift”
[…] How to accelerate your cloud-native AppDev with knative Java and OpenShift, […]
Here’s a great free ebook to further dive into Quarkus: https://developers.redhat.com/books/understanding-quarkus
[…] my last post I promised to introduce you to a selected set of Quarkus extensions. Today I will cover three of […]