A Command Line Application with Quarkus

To create a command line application with quarkus (aka Command Mode), annotate the "main" class with @QuarkusMain and implement the QuarkusApplication interface.

After the execution of the method run quarkus will automatically shutdown:

import javax.inject.Inject;

import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain;

public class SuperSonicApp implements QuarkusApplication {
    Messenger supplier;

    public int run(String... args) throws Exception {
        System.out.println("Message from messenger: " + this.supplier.message());
        return 42; //exit code

Dependency injection, microprofile features etc. are working as expected. The message property defined in application.properties:

message=hey duke

is injectable:

import javax.enterprise.context.Dependent;
import javax.inject.Inject;

import org.eclipse.microprofile.config.inject.ConfigProperty;

public class Messenger {

    @ConfigProperty(name = "message")
    String message;

    public String message() {
        return this.message;

The application generates the following output and stops:

INFO  [io.quarkus] (main) supersonic-main 1.0-SNAPSHOT (powered by Quarkus 1.4.2.Final) started in 0.248s.
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi]
Message from messenger: hey duke
INFO  [io.quarkus] (main) supersonic-main stopped in 0.003s

Command mode already ships with quarkus runtime, there are no additional extensions needed. In the example above CDI and MicroProfile Config were used, which ship with:


In code executed from the "main" method there are no incoming requests. Therefore scopes like e.g. @RequestScoped are not available.

The request scope can be activated with: ActivateRequestContext CDI 2.0 annotation.


Post a Comment:
  • HTML Syntax: NOT allowed
...the last 150 posts
...the last 10 comments