> For the complete documentation index, see [llms.txt](https://docs.rumi.systems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rumi.systems/rumi-core/guides/developing-applications/set-up-your-dev-environment.md).

# Set Up your Dev Environment

This section describes what needs to be done to set up your environment to develop Rumi applications.

You will need the following to build and run Rumi applications

* A JDK
* Maven
* An IDE

## Install JDK

Ensure you have one of the following JDKs installed on your machine.

* JDK 8
* JDK 11
* JDK 17
* JDK 21

You can download and install the JDK from [here](https://www.oracle.com/java/technologies/downloads/)

## Install Maven

Rumi modules implemements several plugins for code generation and preparation of deployment artifacts that integrate into the build cycle. Currently, all these plugins are built for Maven. Therefore, Maven is the preferred tool to build Rumi applications.

You can download and install Maven from [here](https://maven.apache.org).

Free Maven installation tutorials can be found at:

* [Windows](https://www.youtube.com/watch?v=Jtj-0yhox5s\&t=72s\&ab_channel=EvilTester-SoftwareTesting)
* [OSX](https://www.youtube.com/watch?v=EoXImdzlAls\&ab_channel=AutomationStepbyStep-RaghavPal)

Please make sure you install Maven v3.0.4 or later.

{% hint style="info" %}
**Using Other Build Tools:** The functionality of each Maven plugin implemented by the Rumi is also available as a CLI tool implemented by the core Rumi runtime. In fact, the plugins and the CLI tools are each implemented using a common underlying API implemented by the Rumi runtime. These CLI tools are intended for use with build tools other than Maven such as Gradle and Ivy
{% endhint %}

### Set JAVA\_HOME

Set the following in your environment

```
JAVA_HOME=<Home directory of the JDK which you would like to use to build Rumi applications>
```

This setting is used by Maven to determine the JDK to use to build your Rumi project.

### Building Using Java 11 or Beyond <a href="#building-using-java11-and-beyond" id="building-using-java11-and-beyond"></a>

To run Rumi code generation plugins and build the generated core, you would need to include the following additional dependencies in your Maven project. This is due to the removal of these packages from the JDK after JDK8

```
<dependencies>
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>

    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>2.3.3</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.8</version>
    </dependency>
</dependencies>
 
```

{% hint style="info" %}
**Versions:** The versions above are the versions against which the Rumi has been tested.
{% endhint %}

## Rumi Licensing

Rumi is free to use and no license is required to build and run Rumi applications.

## Setup your IDE

Rumi applications can be developed using any IDE that supports developing of Java applications.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rumi.systems/rumi-core/guides/developing-applications/set-up-your-dev-environment.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
