Using the Graal Development Kit for Micronaut Command Line Interface

This guide describes how to use the Graal Development Kit for Micronaut (GDK) Command Line Interface (CLI) to generate a project containing an application. (To install the GDK CLI, see Installing the GDK CLI.)

The GDK CLI can create the following types of project:

Type Command
Application: a server application create-app NAME
Function: a serverless cloud function create-function NAME
Gateway Function: a serverless cloud gateway function create-gateway-function NAME

Where NAME is the name of the project to create.

The synopsis to create a server application, a cloud function, or a cloud gateway function is:

gcn create-app [-ehvVx] \
[--b=BUILD-TOOL] \
[--jdk=<javaVersion>] \
[--lang=LANG] \
[--t=TEST] \
[--clouds=CLOUD[,CLOUD...]]... \
[--features=FEATURE[,FEATURE...]]... \
[--services=SERVICE[,SERVICE...]]... \
[NAME]

The options you can use are:

  • -b, --build=BUILD-TOOL: Specifies which Java build tool to use. Possible values: gradle, gradle_kotlin, or maven. If you do not specify the --build argument, Gradle will be used by default.
  • -c, --clouds=CLOUD[,CLOUD...]: Specifies one ore more cloud providers. Possible values: aws, gcp, and oci.
  • -e, --example-code: Generates example code.
  • -f, --features=FEATURE[,FEATURE...]: Specifies the features to include.
  • --jdk, --java-version=<javaVersion>: Specifies the JDK version the project should target (JDK 17 or higher).
  • -l, --lang=LANG: Specifies which language to use. Possible values: java, groovy, or kotlin. If you do not specify the --lang argument, Java is used by default.
  • -s, --services=SERVICE[,SERVICE...]: Defines one ore more Micronaut services to use. Possible values are: auth, database, email, k8s, logging, metrics, objectstore, sdk, streaming, tracing, and vault.
  • -t, --test=TEST: Specifies which test framework to use. Possible values: junit, spock, or kotest.
  • -v, --verbose: Uses verbose output.
  • -V, --version: Prints version information and exit.
  • -x, --stacktrace: Shows full stack trace when exceptions occur.

Once you run the command, the GDK CLI generates a multimodule project with separate modules for each cloud, and a common lib module where you can create content that is shared between the cloud-specific modules. This enables you to separate logic that is different between cloud providers, while keeping most of the implementation in the common lib module.

Note: A project’s dependencies (and other configuration details) are described in build files (such as build.gradle or pom.xml). For more information about build files, see Build Configuration for Micronaut.

The [name] of the project (for example, “guide”) determines the name of the directory that contains the project. For example, a Maven project directory structure is as follows:

    .
    ├── LICENSE
    ├── README.md
    ├── lib
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │       │   ├── java
    │       │   │   └── example
    │       │   │       └── com
    │       │   └── resources
    │       └── test
    │           └── java
    │               └── example
    │                   └── com
    ├── aws
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │       │   ├── java
    │       │   │   └── example
    │       │   │       └── com
    │       │   │           └── Application.java
    │       │   └── resources
    |       |       ├── application.properties
    │       │       ├── application-ec2.properties
    │       │       ├── bootstrap.properties
    │       │       ├── bootstrap-ec2.properties
    │       │       └── logback.xml
    │       └── test
    │           └── java
    │               └── example
    │                   └── com
    │                       └── AwsTest.java
    ├── micronaut-cli.yml
    ├── mvnw
    ├── mvnw.bat
    ├── oci
    │   ├── pom.xml
    │   └── src
    │       ├── main
    │       │   ├── java
    │       │   │   └── example
    │       │   │       └── con
    │       │   │           └── Application.java
    │       │   └── resources
    |       |       ├── application.properties
    │       │       ├── application-oraclecloud.properties
    │       │       ├── bootstrap.properties
    │       │       ├── bootstrap-oraclecloud.properties
    │       │       └── logback.xml
    │       └── test
    │           └── java
    │               └── example
    │                   └── con
    │                       └── OciTest.java
    └── pom.xml