Chapter 3. Creating the Getting Started project
The getting-started
project lets you get up and running with a simple Quarkus application using Apache Maven and the Quarkus Maven plug-in.
Procedure
In a command terminal, enter the following command to verify that Maven is using JDK 11 and that the Maven version is 3.6.2 or higher:
mvn --version
- If the preceding command does not return JDK 11, add the path to JDK 11 to the PATH environment variable and enter the preceding command again.
To generate the project, enter one of the following commands:
NoteApple macOS and Microsoft Windows are not supported production environments.
If you are using Linux or Apple macOS, enter the following command:
mvn io.quarkus:quarkus-maven-plugin:1.11.7.Final-redhat-00009:create \ -DprojectGroupId=org.acme \ -DprojectArtifactId=getting-started \ -DplatformGroupId=com.redhat.quarkus \ -DplatformVersion=1.11.7.Final-redhat-00009 \ -DclassName="org.acme.quickstart.GreetingResource" \ -Dpath="/hello" cd getting-started
If you are using the Microsoft Windows command line, enter the following command:
mvn io.quarkus:quarkus-maven-plugin:1.11.7.Final-redhat-00009:create -DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DplatformGroupId=com.redhat.quarkus -DplatformVersion=1.11.7.Final-redhat-00009 -DclassName="org.acme.quickstart.GreetingResource" -Dpath="/hello"
If you are using the Microsoft Windows Powershell, enter the following command:
mvn io.quarkus:quarkus-maven-plugin:1.11.7.Final-redhat-00009:create "-DprojectGroupId=org.acme" "-DprojectArtifactId=getting-started" "-DplatformVersion=1.11.7.Final-redhat-00009" "-DplatformGroupId=com.redhat.quarkus" "-DclassName=org.acme.quickstart.GreetingResource" "-Dpath=/hello"
These commands create the following elements in the
./getting-started
directory:- The Maven project directory structure
-
An
org.acme.quickstart.GreetingResource
resource exposed on/hello
- Associated unit tests for testing your application in native mode and JVM mode
-
A landing page that is accessible on
http://localhost:8080
after you start the application -
Example
Dockerfile.jvm
,Dockerfile.native
, andDockerfile.fast-jar
files in thesrc/main/docker
directory - The application configuration file
After the directory structure is created, open the
pom.xml
file in a text editor and examine the contents of the file:<dependencyManagement> <dependencies> <dependency> <groupId>com.redhat.quarkus</groupId> <artifactId>quarkus-universe-bom</artifactId> <version>${quarkus.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus-plugin.version}</version> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
The Quarkus BOM is included in the
<dependencyManagement>
section of thepom.xml
file. Therefore, you do not need to list the versions of individual Quarkus dependencies in thepom.xml
file. In addition, you can see thequarkus-maven-plugin
plug-in that is responsible for packaging the application and providing the development mode.Review the
quarkus-resteasy
dependency in thepom.xml
file. This dependency enables you to develop REST applications:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency>
Review the
src/main/java/org/acme/quickstart/GreetingResource.java
file:package org.acme.quickstart; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class GreetingResource { @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return "hello"; } }
This file contains a simple REST endpoint that returns
hello
as a response to a request that you send to the/hello
endpoint.NoteWith Quarkus, the
Application
class for JAX-RS is supported but not required. In addition, only one instance of theGreetingResource
class is created and not one per request. You can configure this by using different*Scoped
annotations, for exampleApplicationScoped
,RequestScoped
, and so forth.
You can create a Quarkus Maven project using the code.quarkus.redhat.com project generator. See Creating a Quarkus Maven project using code.quarkus.redhat.com for details.