# Getting started with Quarkus This is a minimal CRUD service exposing a couple of endpoints over REST. Under the hood, this demo uses: - RESTEasy to expose the REST endpoints - REST-assured and JUnit 5 for endpoint testing ## Requirements To compile and run this demo you will need: - JDK 17+ - GraalVM ### Configuring GraalVM and JDK 17+ Make sure that both the `GRAALVM_HOME` and `JAVA_HOME` environment variables have been set, and that a JDK 17+ `java` command is on the path. See the [Building a Native Executable guide](https://quarkus.io/guides/building-native-image-guide) for help setting up your environment. ## Building the application Launch the Maven build on the checked out sources of this demo: > ./mvnw package ### Live coding with Quarkus The Maven Quarkus plugin provides a development mode that supports live coding. To try this out: > ./mvnw quarkus:dev This command will leave Quarkus running in the foreground listening on port 8080. 1. Visit the default endpoint: [http://127.0.0.1:8080](http://127.0.0.1:8080). - Make a simple change to [src/main/resources/META-INF/resources/index.html](src/main/resources/META-INF/resources/index.html) file. - Refresh the browser to see the updated page. 2. Visit the `/hello` endpoint: [http://127.0.0.1:8080/hello](http://127.0.0.1:8080/hello) - Update the response in [src/main/java/org/acme/quickstart/GreetingResource.java](src/main/java/org/acme/quickstart/GreetingResource.java). Replace `hello` with `hello there` in the `hello()` method. - Refresh the browser. You should now see `hello there`. - Undo the change, so the method returns `hello` again. - Refresh the browser. You should now see `hello`. ### Run Quarkus in JVM mode When you're done iterating in developer mode, you can run the application as a conventional jar file. First compile it: > ./mvnw package Then run it: > java -jar ./target/quarkus-app/quarkus-run.jar Have a look at how fast it boots, or measure the total native memory consumption. ### Run Quarkus as a native executable You can also create a native executable from this application without making any source code changes. A native executable removes the dependency on the JVM: everything needed to run the application on the target platform is included in the executable, allowing the application to run with minimal resource overhead. Compiling a native executable takes a bit longer, as GraalVM performs additional steps to remove unnecessary codepaths. Use the `native` profile to compile a native executable: > ./mvnw package -Dnative After getting a cup of coffee, you'll be able to run this executable directly: > ./target/getting-started-1.0.0-SNAPSHOT-runner