Camel K Modeline

Integration files can contain modeline hooks that allow to customize the way integrations are executed via command line.

For example, take the following integration file:

Hello.java
// camel-k: dependency=mvn:org.my/application:1.0 (1)

import org.apache.camel.builder.RouteBuilder;

public class Hello extends RouteBuilder {
  @Override
  public void configure() throws Exception {

      from("timer:java?period=1000")
        .bean(org.my.BusinessLogic) (2)
        .log("${body}");

  }
}
1 Modeline import of Maven library
2 Usage of a business logic class from the external library

When the integration code above is executed using the kamel run CLI command, the modeline options declared in the file are appended to the list of arguments that are passed to the command.

The kamel CLI will alert you, printing the full command in the shell:

$ kamel run Hello.java
Modeline options have been loaded from source files
Full command: kamel run Hello.java --dependency mvn:org.my/application:1.0
...

Multiple options, even of the same type, can be specified for an integration. For example the following modeline options make sure that the integration runs on the Quarkus runtime and enable the 3scale exposure.

QuarkusRest.java
// camel-k: trait=quarkus.enabled=true trait=3scale.enabled=true (1)

import org.apache.camel.builder.RouteBuilder;

public class QuarkusRest extends RouteBuilder {
  @Override
  public void configure() throws Exception {

      rest().get("/")
        .route()
        .setBody().constant("Hello");

  }
}
1 Enable both the Quarkus and 3scale traits, to run the integration on Quarkus and expose the routes via 3scale

All options that are available for the kamel run command can be specified as modeline options. The following is a partial list of useful options:

Table 1. Useful Modeline Options
Option Description

dependency

An external library that should be included. E.g. for Maven dependencies "dependency=mvn:org.my/app:1.0"

env

Set an environment variable in the integration container. E.g "env=MY_VAR=my-value"

label

Add a label to the integration. E.g. "label=my.company=hello"

name

The integration name

open-api

Add an OpenAPI v2 spec (file path)

profile

Trait profile used for deployment

property

Add a camel property

property-file

Bind a property file to the integration. E.g. "property-file=integration.properties"

resource

Add a resource

trait

Configure a trait. E.g. "trait=service.enabled=false"