# welcome Welcome to the getting started guide, you will find here a step by step guide using a **Maven archetype**. Optionally, you might want to try the one of the starter projects: - [Starter projects](https://github.com/search?q=topic%3Astarter+org%3Ajooby-project&type=Repositories) - [Gradle starter](https://github.com/jooby-project/gradle-starter) - [Kotlin starter](https://github.com/jooby-project/kotlin-starter) - [Kotlin gradle starter](https://github.com/jooby-project/kotlin-gradle-starter) requirements ===== * Install {{java}} * Install {{maven}} quickstart ===== Just paste this into a terminal (make sure [Java 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) and [Maven 3.x](http://maven.apache.org/download.cgi) are installed): ```bash mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion={{version}} ``` You might want to edit/change: * -DgroupId: A Java package's name * -DartifactId: A project's name in lower case and without spaces * -Dversion: A project's version, like ```1.0-SNAPSHOT``` or ```1.0.0-SNAPSHOT``` Let's try it!: ```bash mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion={{version}} cd my-app mvn jooby:run ``` You should see something similar to this at the end of the output: ```bash INFO [2015-03-19 21:34:00,365] Hotswap available on: [my-app/public, my-app/conf, my-app/target/classes] INFO [2015-03-19 21:34:00,368] includes: [**/*.class,**/*.conf,**/*.properties] INFO [2015-03-19 21:34:00,369] excludes: [] INFO [2015-03-19 21:34:00,937] [dev@netty]: App server started in 502ms GET / [*/*] [*/*] (anonymous) listening on: http://0.0.0.0:8080/ ``` **Jooby**! is up and running! getting started ===== exploring the newly created project ----- A new directory was created: ```my-app```. Let's see what it looks like: ```bash . ├── public | └── (empty) ├── conf | ├── application.conf | └── logback.xml └── src ├── main | └── java | └── com | └── mycompany | └── App.java └── test └── java └── com └── mycompany └── AppTest.java ``` The **public** folder contains static content like ```*.html```, ```*.js```, ```*.css```, ..., ```*.png``` files. The **conf** folder contains ```*.conf```. The **src/main/java** folder contains ```*.java``` files (of course). The **src/test/java** folder contains unit and integration tests. > **NOTE**: The ```public``` and ```conf``` folders are part of the classpath. ### App.java ```java import org.jooby.Jooby; public class App extends Jooby { // 1 { // 2 get("/", () -> "Hello World!"); } public static void main(final String[] args) { run(App::new, args); // 3. start the application. } } ``` Steps involved are: 1) extend Jooby 2) define some routes 3) call the ```run``` method running ----- Open a console and type: mvn jooby:run The maven plugin will compile the code (if necessary) and start the application. Of course, you can generate the IDE metadata from Maven or import as a Maven project in your favorite IDE. Afterwards, all you have to do is run the: ```App.java``` class. After all, this is a plain Java application with a ```main``` method. where to go now? ----- * read the [documentation](/doc) * check out one of the {{templates}}