В этой статье показано, как использовать quarks-maven-плагин для создания или создания проекта Maven +Quarks JAX-RS hello world.
Используемые технологии:
- Кваркус 1.11.0
- Мавен 3.6.3
- Java 11
Темы
- Создание нового проекта Maven + Quartus
- Структура проекта Maven + Кварки
- Кварки и pom.xml
- Зависимости кварков
- Конечная точка кварков JAX-RX
- Кварки и док-файл
- Запуск кварков в режиме разработки
- Скачать Исходный Код
- Рекомендации
1. Создание нового проекта Maven + Quartus
Мы можем использовать quarks-maven-плагин для создания проекта Quarkus JAX-RS.
1.1 Для систем Linux и macOS.
mvn io.quarkus:quarkus-maven-plugin:1.11.0.Final:create \ -DprojectGroupId=com.mkyong \ -DprojectArtifactId=quarkus-hello-world-maven \ -DclassName="com.mkyong.quarkus.HelloResource" \ -Dpath="/hello"
1.2 Для Windows, cmd
или командная строка, замените новую строку \
с помощью ^
.
mvn io.quarkus:quarkus-maven-plugin:1.11.0.Final:create ^ -DprojectGroupId=com.mkyong ^ -DprojectArtifactId=quarkus-hello-world-maven ^ -DclassName="com.mkyong.quarkus.HelloResource" ^ -Dpath="/hello"
Выход
----------- [INFO] [INFO] ======================================================================================== [INFO] Your new application has been created in C:\Users\mkyong\projects\quarkus\quarkus-hello-world-maven [INFO] Navigate into this directory and launch your application with mvn quarkus:dev [INFO] Your application will be accessible on http://localhost:8080 [INFO] ======================================================================================== [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.774 s [INFO] Finished at: 2021-01-26T13:25:14+08:00 [INFO] ------------------------------------------------------------------------
2. Структура проекта Maven + Кварки
Команда выше создала новый проект с именем quarks-hello-world-maven
и создает следующие файлы и каталоги:
- Стандартная структура каталогов Maven.
- Мавен
pom.xml
и связанная с ним обертка. HelloResource.java
для/привет
конечной точки.- Модульные тесты.
- Целевая страница
resources\META-INF\resources\index.html
дляhttp://localhost:8080
Dockerfile
файлы, дляjvm
илисобственного
режима.- Файл конфигурации приложения,
application.properties
.
> cd quarkus-hello-world-maven C:\Users\mkyong\projects\quarkus\quarkus-hello-world-maven> tree /F Folder PATH listing Volume serial number is A446-18E6 C:. â"' .dockerignore â"' .gitignore â"' mvnw â"' mvnw.cmd â"' pom.xml â"' README.md â"' â"œâ"€â"€â"€.idea â"' misc.xml â"' vcs.xml â"' workspace.xml â"' â"œâ"€â"€â"€.mvn â"' â""â"€â"€â"€wrapper â"' maven-wrapper.properties â"' MavenWrapperDownloader.java â"' â""â"€â"€â"€src â"œâ"€â"€â"€main â"' â"œâ"€â"€â"€docker â"' â"' Dockerfile.fast-jar â"' â"' Dockerfile.jvm â"' â"' Dockerfile.native â"' â"' â"' â"œâ"€â"€â"€java â"' â"' â""â"€â"€â"€com â"' â"' â""â"€â"€â"€mkyong â"' â"' â""â"€â"€â"€quarkus â"' â"' HelloResource.java â"' â"' â"' â""â"€â"€â"€resources â"' â"' application.properties â"' â"' â"' â""â"€â"€â"€META-INF â"' â""â"€â"€â"€resources â"' index.html â"' â""â"€â"€â"€test â""â"€â"€â"€java â""â"€â"€â"€com â""â"€â"€â"€mkyong â""â"€â"€â"€quarkus HelloResourceTest.java NativeHelloResourceIT.java
3. Кварки и pom.xml
Просмотрите сгенерированный pom.xml
файл.
3.1 Проект Quarks JAX-RS требовал только двух зависимостей: кварки-дуга
и кваркус-resteasy
. ((Переходные зависимости огромны, читайте ниже для полных зависимостей кварков ).
io.quarkus quarkus-arc io.quarkus quarkus-resteasy
Кварки используют JUnit 5 и REST-assured для модульных тестов.
io.quarkus quarkus-junit5 test io.rest-assured rest-assured test
Полный pom.xml
.
4.0.0 com.mkyong quarkus-hello-world-maven 1.0.0-SNAPSHOT 2.22.1 11 1.11.0.Final 11 UTF-8 quarkus-universe-bom UTF-8 true 1.11.0.Final 3.8.1 io.quarkus ${quarkus.platform.group-id} ${quarkus.platform.artifact-id} ${quarkus.platform.version} pom import io.quarkus quarkus-arc io.quarkus quarkus-resteasy io.quarkus quarkus-junit5 test io.rest-assured rest-assured test io.quarkus quarkus-maven-plugin ${quarkus-plugin.version} true build generate-code generate-code-tests maven-compiler-plugin ${compiler-plugin.version} maven-surefire-plugin ${surefire-plugin.version} org.jboss.logmanager.LogManager ${maven.home} native native maven-failsafe-plugin ${surefire-plugin.version} integration-test verify ${project.build.directory}/${project.build.finalName}-runner org.jboss.logmanager.LogManager ${maven.home} native
4. Зависимости кварков
4.1 Просмотрите полные зависимости проекта для проекта по умолчанию Quarks JAX-RS.
Основные технологии Кварков:
- Кварки используют Vert.x и Нетти в своей основе, обеспечение реактивного и неблокирующего HTTP-уровня.
- Кварки используют RESTEasy для конечной точки JAX-RS.
- Quarks использует ARC в качестве решения для внедрения зависимостей, которое основано на Контекстах и внедрении зависимостей для спецификации Java 2.0 . ARC – это подмножество CDI, адаптированное для архитектуры кварков.
- Quarks использует JBoss Log Manager в качестве платформы ведения журнала по умолчанию.
- Quartus использует модифицированную версию Undertow (движок сервлетов/веб-сайтов), которая работает поверх Vert.x
- Кварки используют Конфигурацию Small Rye/|, реализацию Конфигурации микропрофиля Eclipse , для данных конфигурации.
Для тестирования:
- Кварки использует JUnit 5 для тестирования.
- Кварки используют будьте уверены для тестирования конечных точек HTTP.
4.2 Представление зависимостей проекта в IntelliJ IDEA.
4.3 Команда Maven зависимость: дерево
для просмотра полных зависимостей проекта (длинный список) в текстовом формате.
C:\Users\mkyong\projects\quarkus\quarkus-hello-world-maven>mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ----------------< com.mkyong:quarkus-hello-world-maven >---------------- [INFO] Building quarkus-hello-world-maven 1.0.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ quarkus-hello-world-maven --- [INFO] com.mkyong:quarkus-hello-world-maven:jar:1.0.0-SNAPSHOT [INFO] +- io.quarkus:quarkus-arc:jar:1.11.0.Final:compile [INFO] | +- io.quarkus.arc:arc:jar:1.11.0.Final:compile [INFO] | | +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:2.0.2:compile [INFO] | | | +- jakarta.el:jakarta.el-api:jar:3.0.3:compile [INFO] | | | \- jakarta.interceptor:jakarta.interceptor-api:jar:1.2.5:compile [INFO] | | +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile [INFO] | | +- jakarta.transaction:jakarta.transaction-api:jar:1.3.3:compile [INFO] | | \- org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile [INFO] | +- io.quarkus:quarkus-core:jar:1.11.0.Final:compile [INFO] | | +- jakarta.inject:jakarta.inject-api:jar:1.0:compile [INFO] | | +- io.quarkus:quarkus-ide-launcher:jar:1.11.0.Final:compile [INFO] | | +- io.quarkus:quarkus-development-mode-spi:jar:1.11.0.Final:compile [INFO] | | +- io.smallrye.config:smallrye-config:jar:1.10.0:compile [INFO] | | | +- io.smallrye.common:smallrye-common-annotation:jar:1.5.0:compile [INFO] | | | +- io.smallrye.config:smallrye-config-common:jar:1.10.0:compile [INFO] | | | | \- org.eclipse.microprofile.config:microprofile-config-api:jar:1.4:compile [INFO] | | | +- io.smallrye.common:smallrye-common-expression:jar:1.5.0:compile [INFO] | | | | \- io.smallrye.common:smallrye-common-function:jar:1.5.0:compile [INFO] | | | +- io.smallrye.common:smallrye-common-constraint:jar:1.5.0:compile [INFO] | | | \- io.smallrye.common:smallrye-common-classloader:jar:1.5.0:compile [INFO] | | +- org.jboss.logmanager:jboss-logmanager-embedded:jar:1.0.6:compile [INFO] | | +- org.jboss.logging:jboss-logging-annotations:jar:2.2.0.Final:compile [INFO] | | +- org.jboss.threads:jboss-threads:jar:3.2.0.Final:compile [INFO] | | +- org.slf4j:slf4j-api:jar:1.7.30:compile [INFO] | | +- org.jboss.slf4j:slf4j-jboss-logmanager:jar:1.1.0.Final:compile [INFO] | | +- org.graalvm.sdk:graal-sdk:jar:20.3.0:compile [INFO] | | +- org.wildfly.common:wildfly-common:jar:1.5.4.Final-format-001:compile [INFO] | | \- io.quarkus:quarkus-bootstrap-runner:jar:1.11.0.Final:compile [INFO] | \- org.eclipse.microprofile.context-propagation:microprofile-context-propagation-api:jar:1.0.1:compile [INFO] +- io.quarkus:quarkus-resteasy:jar:1.11.0.Final:compile [INFO] | +- io.quarkus:quarkus-vertx-http:jar:1.11.0.Final:compile [INFO] | | +- io.quarkus:quarkus-security-runtime-spi:jar:1.11.0.Final:compile [INFO] | | +- io.quarkus:quarkus-vertx-http-dev-console-runtime-spi:jar:1.11.0.Final:compile [INFO] | | +- io.quarkus.security:quarkus-security:jar:1.1.3.Final:compile [INFO] | | | \- io.smallrye.reactive:mutiny:jar:0.12.5:compile [INFO] | | | \- org.reactivestreams:reactive-streams:jar:1.0.3:compile [INFO] | | +- io.quarkus:quarkus-vertx-core:jar:1.11.0.Final:compile [INFO] | | | +- io.quarkus:quarkus-netty:jar:1.11.0.Final:compile [INFO] | | | | +- io.netty:netty-codec:jar:4.1.49.Final:compile [INFO] | | | | \- io.netty:netty-handler:jar:4.1.49.Final:compile [INFO] | | | \- io.vertx:vertx-core:jar:3.9.5:compile [INFO] | | | +- io.netty:netty-common:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-buffer:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-transport:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-handler-proxy:jar:4.1.49.Final:compile [INFO] | | | | \- io.netty:netty-codec-socks:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-codec-http:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-codec-http2:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-resolver:jar:4.1.49.Final:compile [INFO] | | | +- io.netty:netty-resolver-dns:jar:4.1.49.Final:compile [INFO] | | | | \- io.netty:netty-codec-dns:jar:4.1.49.Final:compile [INFO] | | | \- com.fasterxml.jackson.core:jackson-core:jar:2.11.3:compile [INFO] | | \- io.vertx:vertx-web:jar:3.9.5:compile [INFO] | | +- io.vertx:vertx-web-common:jar:3.9.5:compile [INFO] | | +- io.vertx:vertx-auth-common:jar:3.9.5:compile [INFO] | | \- io.vertx:vertx-bridge-common:jar:3.9.5:compile [INFO] | \- io.quarkus:quarkus-resteasy-server-common:jar:1.11.0.Final:compile [INFO] | +- io.quarkus:quarkus-resteasy-common:jar:1.11.0.Final:compile [INFO] | | +- org.jboss.resteasy:resteasy-core:jar:4.5.8.SP1:compile [INFO] | | | +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:2.0.1.Final:compile [INFO] | | | +- org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:2.0.0.Final:compile [INFO] | | | +- org.jboss.resteasy:resteasy-core-spi:jar:4.5.8.SP1:compile [INFO] | | | \- com.ibm.async:asyncutil:jar:0.1.0:compile [INFO] | | \- com.sun.activation:jakarta.activation:jar:1.2.1:compile [INFO] | \- jakarta.validation:jakarta.validation-api:jar:2.0.2:compile [INFO] +- io.quarkus:quarkus-junit5:jar:1.11.0.Final:test [INFO] | +- io.quarkus:quarkus-bootstrap-core:jar:1.11.0.Final:test [INFO] | | +- io.quarkus:quarkus-bootstrap-app-model:jar:1.11.0.Final:test [INFO] | | +- io.quarkus:quarkus-bootstrap-maven-resolver:jar:1.11.0.Final:test [INFO] | | | +- org.apache.maven:maven-embedder:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-settings:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-core:jar:3.6.3:test [INFO] | | | | | +- org.apache.maven:maven-artifact:jar:3.6.3:test [INFO] | | | | | \- org.codehaus.plexus:plexus-component-annotations:jar:2.1.0:test [INFO] | | | | +- org.apache.maven:maven-plugin-api:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-model:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-model-builder:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-builder-support:jar:3.6.3:test [INFO] | | | | +- org.apache.maven.resolver:maven-resolver-api:jar:1.4.1:test [INFO] | | | | +- org.apache.maven.resolver:maven-resolver-util:jar:1.4.1:test [INFO] | | | | +- org.apache.maven.shared:maven-shared-utils:jar:3.2.1:test [INFO] | | | | | \- commons-io:commons-io:jar:2.8.0:test [INFO] | | | | +- com.google.inject:guice:jar:no_aop:4.2.1:test [INFO] | | | | | \- com.google.guava:guava:jar:30.1-jre:test [INFO] | | | | | +- com.google.guava:failureaccess:jar:1.0.1:test [INFO] | | | | | \- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:test [INFO] | | | | +- org.codehaus.plexus:plexus-utils:jar:3.2.1:test [INFO] | | | | +- org.codehaus.plexus:plexus-classworlds:jar:2.6.0:test [INFO] | | | | \- commons-cli:commons-cli:jar:1.4:test [INFO] | | | +- org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.4:test [INFO] | | | +- org.apache.maven:maven-settings-builder:jar:3.6.3:test [INFO] | | | | +- org.codehaus.plexus:plexus-interpolation:jar:1.25:test [INFO] | | | | \- org.sonatype.plexus:plexus-sec-dispatcher:jar:1.4:test [INFO] | | | | \- org.sonatype.plexus:plexus-cipher:jar:1.4:test [INFO] | | | +- org.apache.maven:maven-resolver-provider:jar:3.6.3:test [INFO] | | | | +- org.apache.maven:maven-repository-metadata:jar:3.6.3:test [INFO] | | | | +- org.apache.maven.resolver:maven-resolver-spi:jar:1.4.1:test [INFO] | | | | \- org.apache.maven.resolver:maven-resolver-impl:jar:1.4.1:test [INFO] | | | +- org.apache.maven.resolver:maven-resolver-connector-basic:jar:1.4.1:test [INFO] | | | +- org.apache.maven.resolver:maven-resolver-transport-wagon:jar:1.4.1:test [INFO] | | | +- org.apache.maven.wagon:wagon-http:jar:3.3.4:test [INFO] | | | | +- org.apache.maven.wagon:wagon-http-shared:jar:3.3.4:test [INFO] | | | | | \- org.jsoup:jsoup:jar:1.12.1:test [INFO] | | | | \- org.apache.maven.wagon:wagon-provider-api:jar:3.3.4:test [INFO] | | | \- org.apache.maven.wagon:wagon-file:jar:3.3.4:test [INFO] | | +- io.quarkus:quarkus-bootstrap-gradle-resolver:jar:1.11.0.Final:test [INFO] | | \- io.smallrye.common:smallrye-common-io:jar:1.5.0:compile [INFO] | +- org.eclipse.sisu:org.eclipse.sisu.inject:jar:0.3.4:test [INFO] | +- io.quarkus:quarkus-test-common:jar:1.11.0.Final:test [INFO] | | +- io.quarkus:quarkus-core-deployment:jar:1.11.0.Final:test [INFO] | | | +- io.quarkus.gizmo:gizmo:jar:1.0.6.Final:test [INFO] | | | | \- org.ow2.asm:asm-util:jar:9.0:test [INFO] | | | | +- org.ow2.asm:asm-tree:jar:9.0:test [INFO] | | | | \- org.ow2.asm:asm-analysis:jar:9.0:test [INFO] | | | +- org.ow2.asm:asm:jar:9.0:test [INFO] | | | +- io.quarkus:quarkus-class-change-agent:jar:1.11.0.Final:test [INFO] | | | +- io.quarkus:quarkus-devtools-utilities:jar:1.11.0.Final:test [INFO] | | | \- io.quarkus:quarkus-builder:jar:1.11.0.Final:test [INFO] | | +- io.quarkus:quarkus-jsonp-deployment:jar:1.11.0.Final:test [INFO] | | | \- io.quarkus:quarkus-jsonp:jar:1.11.0.Final:test [INFO] | | | \- org.glassfish:jakarta.json:jar:1.1.6:test [INFO] | | +- org.jboss:jandex:jar:2.2.2.Final:test [INFO] | | \- org.jboss.logging:commons-logging-jboss-logging:jar:1.0.0.Final:test [INFO] | +- org.junit.jupiter:junit-jupiter:jar:5.7.0:test [INFO] | | +- org.junit.jupiter:junit-jupiter-api:jar:5.7.0:test [INFO] | | | +- org.apiguardian:apiguardian-api:jar:1.1.0:test [INFO] | | | +- org.opentest4j:opentest4j:jar:1.2.0:test [INFO] | | | \- org.junit.platform:junit-platform-commons:jar:1.7.0:test [INFO] | | +- org.junit.jupiter:junit-jupiter-params:jar:5.7.0:test [INFO] | | \- org.junit.jupiter:junit-jupiter-engine:jar:5.7.0:test [INFO] | | \- org.junit.platform:junit-platform-engine:jar:1.7.0:test [INFO] | \- com.thoughtworks.xstream:xstream:jar:1.4.14:test [INFO] | +- xmlpull:xmlpull:jar:1.1.3.1:test [INFO] | \- xpp3:xpp3_min:jar:1.1.4c:test [INFO] \- io.rest-assured:rest-assured:jar:4.3.3:test [INFO] +- org.codehaus.groovy:groovy:jar:3.0.5:test [INFO] +- org.codehaus.groovy:groovy-xml:jar:3.0.7:test [INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.13:test [INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.14:test [INFO] | \- commons-codec:commons-codec:jar:1.14:test [INFO] +- org.apache.httpcomponents:httpmime:jar:4.5.13:test [INFO] +- org.hamcrest:hamcrest:jar:2.1:test [INFO] +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test [INFO] +- io.rest-assured:json-path:jar:4.3.3:test [INFO] | +- org.codehaus.groovy:groovy-json:jar:3.0.5:test [INFO] | \- io.rest-assured:rest-assured-common:jar:4.3.3:test [INFO] \- io.rest-assured:xml-path:jar:4.3.3:test [INFO] +- org.apache.commons:commons-lang3:jar:3.9:test [INFO] +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:test [INFO] | \- jakarta.activation:jakarta.activation-api:jar:1.2.1:test [INFO] \- com.sun.xml.bind:jaxb-impl:jar:2.3.3:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.412 s [INFO] Finished at: 2021-01-26T15:02:09+08:00 [INFO] ------------------------------------------------------------------------
4.4 Приведенная выше зависимость mvn: дерево
отображает все зависимости компилятора, среды выполнения и тестирования приложения. Однако мы можем использовать плагин Maven quarks-bootstrap-maven-plugin
для отображения только зависимостей времени выполнения приложения Quarkus.
Поместите это в pom.xml
io.quarkus quarkus-bootstrap-maven-plugin ${quarkus-plugin.version}
В терминале введите mv nw quarks-bootstrap:build-tree
, чтобы отобразить зависимости времени выполнения.
> mvnw quarkus-bootstrap:build-tree [INFO] Scanning for projects... [INFO] [INFO] ----------------< com.mkyong:quarkus-hello-world-maven >---------------- [INFO] Building quarkus-hello-world-maven 1.0.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- quarkus-bootstrap-maven-plugin:1.11.0.Final:build-tree (default-cli) @ quarkus-hello-world-maven --- [INFO] com.mkyong:quarkus-hello-world-maven:pom:1.0.0-SNAPSHOT [INFO] â"œâ"€ io.quarkus:quarkus-arc-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-core-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ org.wildfly.common:wildfly-common:jar:1.5.4.Final-format-001 (compile) [INFO] â"' â"' â"œâ"€ io.quarkus.gizmo:gizmo:jar:1.0.6.Final (compile) [INFO] â"' â"' â"' â""â"€ org.ow2.asm:asm-util:jar:9.0 (compile) [INFO] â"' â"' â"' â"œâ"€ org.ow2.asm:asm-tree:jar:9.0 (compile) [INFO] â"' â"' â"' â""â"€ org.ow2.asm:asm-analysis:jar:9.0 (compile) [INFO] â"' â"' â"œâ"€ org.jboss:jandex:jar:2.2.2.Final (compile) [INFO] â"' â"' â"œâ"€ org.ow2.asm:asm:jar:9.0 (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-development-mode-spi:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-class-change-agent:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-bootstrap-core:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ io.quarkus:quarkus-bootstrap-app-model:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"' â""â"€ org.jboss.logging:commons-logging-jboss-logging:jar:1.0.0.Final (runtime) [INFO] â"' â"' â"' â"œâ"€ io.quarkus:quarkus-bootstrap-maven-resolver:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-embedder:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-settings:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-core:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-artifact:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ org.codehaus.plexus:plexus-component-annotations:jar:2.1.0 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-plugin-api:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-model:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-model-builder:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-builder-support:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven.resolver:maven-resolver-api:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven.resolver:maven-resolver-util:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven.shared:maven-shared-utils:jar:3.2.1 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ commons-io:commons-io:jar:2.8.0 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ com.google.inject:guice:jar:no_aop:4.2.1 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ com.google.guava:guava:jar:30.1-jre (compile) [INFO] â"' â"' â"' â"' â"' â"' â"œâ"€ com.google.guava:failureaccess:jar:1.0.1 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.codehaus.plexus:plexus-utils:jar:3.2.1 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.codehaus.plexus:plexus-classworlds:jar:2.6.0 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ commons-cli:commons-cli:jar:1.4 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.apache.commons:commons-lang3:jar:3.9 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.4 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-settings-builder:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.codehaus.plexus:plexus-interpolation:jar:1.25 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.sonatype.plexus:plexus-sec-dispatcher:jar:1.4 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.sonatype.plexus:plexus-cipher:jar:1.4 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-resolver-provider:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven:maven-repository-metadata:jar:3.6.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven.resolver:maven-resolver-spi:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.apache.maven.resolver:maven-resolver-impl:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven.resolver:maven-resolver-connector-basic:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven.resolver:maven-resolver-transport-wagon:jar:1.4.1 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.apache.maven.wagon:wagon-http:jar:3.3.4 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.maven.wagon:wagon-http-shared:jar:3.3.4 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ org.jsoup:jsoup:jar:1.11.3 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.httpcomponents:httpclient:jar:4.5.13 (compile) [INFO] â"' â"' â"' â"' â"' â"' â""â"€ commons-codec:commons-codec:jar:1.14 (compile) [INFO] â"' â"' â"' â"' â"' â"œâ"€ org.apache.httpcomponents:httpcore:jar:4.4.14 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.apache.maven.wagon:wagon-provider-api:jar:3.3.3 (compile) [INFO] â"' â"' â"' â"' â""â"€ org.apache.maven.wagon:wagon-file:jar:3.3.4 (compile) [INFO] â"' â"' â"' â"œâ"€ io.quarkus:quarkus-bootstrap-gradle-resolver:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â""â"€ io.smallrye.common:smallrye-common-io:jar:1.5.0 (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-devtools-utilities:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ org.eclipse.sisu:org.eclipse.sisu.inject:jar:0.3.4 (runtime) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-core:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ jakarta.inject:jakarta.inject-api:jar:1.0 (compile) [INFO] â"' â"' â"' â"œâ"€ io.quarkus:quarkus-ide-launcher:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ io.smallrye.config:smallrye-config:jar:1.10.0 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ io.smallrye.common:smallrye-common-annotation:jar:1.5.0 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ io.smallrye.config:smallrye-config-common:jar:1.10.0 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ org.eclipse.microprofile.config:microprofile-config-api:jar:1.4 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ io.smallrye.common:smallrye-common-expression:jar:1.5.0 (compile) [INFO] â"' â"' â"' â"' â"' â""â"€ io.smallrye.common:smallrye-common-function:jar:1.5.0 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ io.smallrye.common:smallrye-common-constraint:jar:1.5.0 (compile) [INFO] â"' â"' â"' â"' â""â"€ io.smallrye.common:smallrye-common-classloader:jar:1.5.0 (compile) [INFO] â"' â"' â"' â"œâ"€ org.jboss.logmanager:jboss-logmanager-embedded:jar:1.0.6 (compile) [INFO] â"' â"' â"' â"œâ"€ org.jboss.logging:jboss-logging-annotations:jar:2.2.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ org.jboss.threads:jboss-threads:jar:3.2.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ org.slf4j:slf4j-api:jar:1.7.30 (compile) [INFO] â"' â"' â"' â"œâ"€ org.jboss.slf4j:slf4j-jboss-logmanager:jar:1.1.0.Final (compile) [INFO] â"' â"' â"' â""â"€ io.quarkus:quarkus-bootstrap-runner:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-builder:jar:1.11.0.Final (compile) [INFO] â"' â"' â""â"€ org.graalvm.sdk:graal-sdk:jar:20.3.0 (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-vertx-http-dev-console-spi:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-vertx-http-dev-console-runtime-spi:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus.arc:arc:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â""â"€ jakarta.transaction:jakarta.transaction-api:jar:1.3.3 (compile) [INFO] â"' â"' â""â"€ io.vertx:vertx-web:jar:3.9.5 (compile) [INFO] â"' â"' â"œâ"€ io.vertx:vertx-web-common:jar:3.9.5 (compile) [INFO] â"' â"' â"œâ"€ io.vertx:vertx-auth-common:jar:3.9.5 (compile) [INFO] â"' â"' â"œâ"€ io.vertx:vertx-bridge-common:jar:3.9.5 (compile) [INFO] â"' â"' â""â"€ io.vertx:vertx-core:jar:3.9.5 (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-common:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-buffer:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-transport:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-handler:jar:4.1.49.Final (compile) [INFO] â"' â"' â"' â""â"€ io.netty:netty-codec:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-handler-proxy:jar:4.1.49.Final (compile) [INFO] â"' â"' â"' â""â"€ io.netty:netty-codec-socks:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-codec-http:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-codec-http2:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-resolver:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ io.netty:netty-resolver-dns:jar:4.1.49.Final (compile) [INFO] â"' â"' â"' â""â"€ io.netty:netty-codec-dns:jar:4.1.49.Final (compile) [INFO] â"' â"' â"œâ"€ com.fasterxml.jackson.core:jackson-core:jar:2.11.3 (compile) [INFO] â"' â"' â""â"€ com.fasterxml.jackson.core:jackson-databind:jar:2.11.3 (compile) [INFO] â"' â"' â""â"€ com.fasterxml.jackson.core:jackson-annotations:jar:2.11.3 (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-arc:jar:1.11.0.Final (compile) [INFO] â"' â"' â""â"€ org.eclipse.microprofile.context-propagation:microprofile-context-propagation-api:jar:1.0.1 (compile) [INFO] â"' â""â"€ io.quarkus.arc:arc-processor:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ jakarta.enterprise:jakarta.enterprise.cdi-api:jar:2.0.2 (compile) [INFO] â"' â"' â"œâ"€ jakarta.el:jakarta.el-api:jar:3.0.3 (compile) [INFO] â"' â"' â""â"€ jakarta.interceptor:jakarta.interceptor-api:jar:1.2.5 (compile) [INFO] â"' â"œâ"€ org.jboss.logging:jboss-logging:jar:3.4.1.Final (compile) [INFO] â"' â""â"€ jakarta.annotation:jakarta.annotation-api:jar:1.3.5 (compile) [INFO] â""â"€ io.quarkus:quarkus-resteasy-deployment:jar:1.11.0.Final (compile) [INFO] â"œâ"€ io.quarkus:quarkus-resteasy-server-common-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-resteasy-common-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-resteasy-common:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â"œâ"€ org.jboss.resteasy:resteasy-core:jar:4.5.8.SP1 (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:2.0.1.Final (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:2.0.0.Final (compile) [INFO] â"' â"' â"' â"' â"œâ"€ org.jboss.resteasy:resteasy-core-spi:jar:4.5.8.SP1 (compile) [INFO] â"' â"' â"' â"' â""â"€ com.ibm.async:asyncutil:jar:0.1.0 (compile) [INFO] â"' â"' â"' â""â"€ com.sun.activation:jakarta.activation:jar:1.2.1 (compile) [INFO] â"' â"' â""â"€ io.quarkus:quarkus-resteasy-common-spi:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-resteasy-server-common-spi:jar:1.11.0.Final (compile) [INFO] â"' â""â"€ io.quarkus:quarkus-resteasy-server-common:jar:1.11.0.Final (compile) [INFO] â"' â""â"€ jakarta.validation:jakarta.validation-api:jar:2.0.2 (compile) [INFO] â"œâ"€ io.quarkus:quarkus-undertow-spi:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus.http:quarkus-http-servlet:jar:3.0.18.Final (compile) [INFO] â"' â"' â""â"€ io.quarkus.http:quarkus-http-core:jar:3.0.18.Final (compile) [INFO] â"' â"' â""â"€ io.quarkus.http:quarkus-http-http-core:jar:3.0.18.Final (compile) [INFO] â"' â"œâ"€ jakarta.servlet:jakarta.servlet-api:jar:4.0.3 (compile) [INFO] â"' â""â"€ org.jboss.metadata:jboss-metadata-web:jar:11.0.0.Final (compile) [INFO] â"' â""â"€ org.jboss.metadata:jboss-metadata-common:jar:11.0.0.Final (compile) [INFO] â"œâ"€ io.quarkus:quarkus-vertx-http-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-vertx-core-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-netty-deployment:jar:1.11.0.Final (compile) [INFO] â"' â"' â"' â""â"€ io.quarkus:quarkus-netty:jar:1.11.0.Final (compile) [INFO] â"' â"' â""â"€ io.quarkus:quarkus-vertx-core:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-vertx-http:jar:1.11.0.Final (compile) [INFO] â"' â"' â"œâ"€ io.quarkus:quarkus-security-runtime-spi:jar:1.11.0.Final (compile) [INFO] â"' â"' â""â"€ io.quarkus.security:quarkus-security:jar:1.1.3.Final (compile) [INFO] â"' â"œâ"€ io.quarkus:quarkus-kubernetes-spi:jar:1.11.0.Final (compile) [INFO] â"' â"œâ"€ io.quarkus.qute:qute-core:jar:1.11.0.Final (compile) [INFO] â"' â"' â""â"€ io.smallrye.reactive:mutiny:jar:0.12.5 (compile) [INFO] â"' â"' â""â"€ org.reactivestreams:reactive-streams:jar:1.0.3 (compile) [INFO] â"' â""â"€ org.yaml:snakeyaml:jar:1.27 (compile) [INFO] â"œâ"€ io.quarkus:quarkus-resteasy:jar:1.11.0.Final (compile) [INFO] â""â"€ io.quarkus:quarkus-security-spi:jar:1.11.0.Final (compile) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.256 s [INFO] Finished at: 2021-01-27T21:27:24+08:00 [INFO] ------------------------------------------------------------------------
P.S Типы кварки mvnw-начальная загрузка: справка
для перечисления всех доступных целей.
5. Конечная точка кварков JAX-RX
quarks-maven-плагин
генерирует простой HelloResource.java
для конечной точки /привет
, а также связанного модульного теста.
5.1 Простая конечная точка JAX-RX /привет
, и верните обычный текстовый вывод “Hello RESTEasy”.
package com.mkyong.quarkus; 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 HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return "Hello RESTEasy"; } }
5.2 Модульный тест для проверки вышеуказанной конечной точки.
package com.mkyong.quarkus; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @QuarkusTest public class HelloResourceTest { @Test public void testHelloEndpoint() { given() .when().get("/hello") .then() .statusCode(200) .body(is("Hello RESTEasy")); } }
6. Кварки и док-файл
quarks-maven-плагин
также генерирует три Докерфайл
файлы для создания контейнера Docker для файла JAR или собственного исполняемого файла.
Dockerfile.fast-jar
– Создайте контейнер docker для файла JAR, это новый формат упаковки (Fast-jar) с момента выпуска Quarkus 1.5 , для более быстрого запуска (вероятно, формат по умолчанию в будущем выпуске).Dockerfile.jvm
– Создайте контейнер docker для файла JAR.Докер-файл.собственный
– Создайте контейнер docker для собственного исполняемого файла .
7. Запуск кварков в режиме разработки
7.1 В отдельном терминале введите команду mvn компилировать кварки: dev
для запуска приложения Quarkus в режиме разработки и по умолчанию, включающего горячее развертывание с фоновой компиляцией, что означает, что если мы изменим какой-либо код, изменения автоматически вступят в силу.
По умолчанию приложение Quarkus запускается с порта 8080
.
> mvnw compile quarkus:dev OpenJDK 64-Bit Server VM warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2021-01-26 16:19:28,903 INFO [io.quarkus] (Quarkus Main Thread) quarkus-hello-world-maven 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.11.0.Final) started in 1.677s. Listening on: http://localhost:8080 2021-01-26 16:19:28,905 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. 2021-01-26 16:19:28,912 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy]
7.2 Доступ к конечной точке /привет
.
> curl http://localhost:8080/hello Hello RESTEasy
7.3 Мы изменяем /привет
package com.mkyong.quarkus; 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 HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { //return "Hello RESTEasy"; return "Hello World Quarkus"; } }
7.4 Возвращаясь к терминалу, который запускает приложение Quarks, рабочий поток vert.x
обнаружит измененный файл и автоматически выполнит горячую замену.
OpenJDK 64-Bit Server VM warning: forcing TieredStopAtLevel to full optimization because JVMCI is enabled Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2021-01-26 16:19:28,903 INFO [io.quarkus] (Quarkus Main Thread) quarkus-hello-world-maven 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.11.0.Final) started in 1.677s. Listening on: http://localhost:8080 2021-01-26 16:19:28,905 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. 2021-01-26 16:19:28,912 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy] 2021-01-26 21:52:36,449 INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (vert.x-worker-thread-1) Changed source files detected, recompiling [C:\Users\mkyong\projects\quarkus\quarkus-hello-world-maven\src\main\java\com\mkyong\quarkus\HelloResource.java] 2021-01-26 21:52:36,940 INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (vert.x-worker-thread-1) Application restart not required, replacing classes via instrumentation 2021-01-26 21:52:36,972 INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (vert.x-worker-thread-1) Hot replace performed via instrumentation, no restart needed, total time: 0.525s
7.4 Снова откройте конечную точку /hello
, чтобы увидеть новые изменения.
> curl http://localhost:8080/hello Hello World Quarkus
7.5 CTRL + C , чтобы остановить запущенное приложение Quark u.
Дальнейшее Чтение
- Создание приложений для кварков с помощью Maven
- Загрузите свое приложение Quarks
- Пример Gradle + Кварки Привет, Мир
Скачать Исходный Код
$клон git $клон git
$$cd кварки- привет-мир-maven
$$mvn компиляция quartus: разработка
$завиток http://localhost:8080/hello
Рекомендации
- Пример Gradle + Кварки Привет, Мир
- Руководство по кваркам
- Инструменты для создания кварков Maven
- Верт.x
- Нетти
- Спокойный
- Маленькая Ржаная Конфиг
- Июнь 5
- будьте уверены
- Как кварки объединяют императивное и реактивное программирование
- Контексты и внедрение зависимостей для спецификации Java 2.0
Оригинал: “https://mkyong.com/quarkus/maven-quarkus-hello-world-example/”