Quarkus: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
No edit summary
 
(27 intermediate revisions by the same user not shown)
Line 1: Line 1:
{|
{|
| valign="top" |
| valign="top" |
<source lang="bash">
<syntaxhighlight lang="bash">
export GRAALVM_HOME=/d/opt/cli/mandrel-java11-21.2.0.0-Final
export GRAALVM_HOME=/d/opt/cli/mandrel-java11-21.2.0.0-Final
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export JAVA_HOME=$JAVA11_HOME
export JAVA_HOME=$JAVA11_HOME
</source>
</syntaxhighlight>
'''OR'''
'''OR'''
<source lang="bash">
<syntaxhighlight lang="bash">
export GRAALVM_HOME=/d/opt/cli/graalvm-ce-java11-21.2.0
export GRAALVM_HOME=/d/opt/cli/graalvm-ce-java11-21.2.0
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export JAVA_HOME=$JAVA11_HOME
export JAVA_HOME=$JAVA11_HOME
gu install native-image
gu install native-image
</source>
</syntaxhighlight>


| valign="top" |
| valign="top" |
<source lang="bat">
<syntaxhighlight lang="bat">
set GRAALVM_HOME=D:\opt\cli\mandrel-java11-21.2.0.0-Final
set GRAALVM_HOME=D:\opt\cli\mandrel-java11-21.2.0.0-Final
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set JAVA_HOME=%JAVA11_HOME%
set JAVA_HOME=%JAVA11_HOME%
</source>
</syntaxhighlight>
'''OR'''
'''OR'''
<source lang="bat">
<syntaxhighlight lang="bat">
set GRAALVM_HOME=D:\opt\cli\graalvm-ce-java11-21.2.0
set GRAALVM_HOME=D:\opt\cli\graalvm-ce-java11-21.2.0
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set JAVA_HOME=%JAVA11_HOME%
set JAVA_HOME=%JAVA11_HOME%
gu install native-image
gu install native-image
</source>
</syntaxhighlight>
|}
|}


==Quarkus Build==
==Quarkus Build==
<source lang="bash">
<syntaxhighlight lang="bash">
git clone https://github.com/quarkusio/quarkus-quickstarts.git
git clone https://github.com/quarkusio/quarkus-quickstarts.git
cd ./quarkus-quickstarts/getting-started
cd ./quarkus-quickstarts/getting-started
</source>
</syntaxhighlight>


<source lang="bash" highlight="3,4" line>
<syntaxhighlight lang="bash" highlight="3,4" line>
# for windows 10 we should avoid symbolic link. instead of symbolic link
# for windows 10 we should avoid symbolic link. instead of symbolic link
# we should use absolute project path either from command or gitbash
# we should use absolute project path either from command or gitbash
Line 43: Line 43:
mvn verify -Pnative -Dquarkus.native.container-runtime=docker -e
mvn verify -Pnative -Dquarkus.native.container-runtime=docker -e
mvn verify -Pnative -Dquarkus.native.container-build=true
mvn verify -Pnative -Dquarkus.native.container-build=true
</source>
</syntaxhighlight>


<source lang="bash" highlight="1,4" line>
<syntaxhighlight lang="bash" highlight="1,4" line>
mvn compile  quarkus:dev
mvn compile  quarkus:dev
mvn package -Pnative
mvn package -Pnative
mvn verify  -Pnative
mvn verify  -Pnative
mvn package
mvn package
</source>
</syntaxhighlight>


==Maven Artifact==
==Maven Artifact==
<source lang="bash">
<syntaxhighlight lang="bash">
mvn io.quarkus:quarkus-maven-plugin:2.1.3.Final:create \
mvn io.quarkus:quarkus-maven-plugin:2.1.3.Final:create \
     -DprojectGroupId=org.chorke.academia.rest \
     -DprojectGroupId=org.chorke.academia.rest \
Line 60: Line 60:
     -Dpath="/hello"
     -Dpath="/hello"
cd getting-started
cd getting-started
</source>
</syntaxhighlight>


==After Build==
==After Build==
<source lang="bash">
<syntaxhighlight lang="bash">
: '
: '
  ./quarkus-quickstarts/getting-started/target/
  ./quarkus-quickstarts/getting-started/target/
Line 90: Line 90:


java -jar target/quarkus-app/quarkus-run.jar
java -jar target/quarkus-app/quarkus-run.jar
</source>
</syntaxhighlight>


==Configuring==
==Configuring==
<source lang="properties">
<syntaxhighlight lang="properties">
quarkus.banner.path=/META-INF/chorke/academia.txt
quarkus.banner.path=/META-INF/chorke/academia.txt
quarkus.banner.enabled=false
quarkus.banner.enabled=false
</source>
</syntaxhighlight>


==Knowledge==
==Knowledge==
Line 121: Line 121:
  '''SAML:''' Security Assertion Markup Language
  '''SAML:''' Security Assertion Markup Language
  '''RBAC:''' Role-Based Access Control
  '''RBAC:''' Role-Based Access Control
'''AoT :''' Ahead of Time Compilation
'''CDI :''' Central Programming Model
  '''IdP :''' Identity Provider
  '''IdP :''' Identity Provider
  '''SP  :''' Service Provider
  '''SP  :''' Service Provider
Line 137: Line 139:
* [https://quarkus.io/guides/security-jwt Quarkus JWT Security]
* [https://quarkus.io/guides/security-jwt Quarkus JWT Security]
* [https://github.com/quarkusio/quarkus-quickstarts Quarkus Quick Starts]
* [https://github.com/quarkusio/quarkus-quickstarts Quarkus Quick Starts]
* [https://quarkus.io/guides/cdi-reference Quarkus CDI]
* [https://quarkus.io/guides/cdi Quarkus CDI]


| valign="top" |
| valign="top" |
Line 163: Line 165:
* [[MicroProfile]]
* [[MicroProfile]]


|-
| colspan="3" |
----
|-
|-
| valign="top" |
| valign="top" |
Line 200: Line 205:
* [https://quarkus.io/guides/spring-di Quarkus Spring DI]
* [https://quarkus.io/guides/spring-di Quarkus Spring DI]


|-
| colspan="3" |
----
|-
|-
| valign="top" |
| valign="top" |
* [https://stackoverflow.com/questions/63620377/ Quarkus with MapStruct & Lombok]
* [https://stackoverflow.com/questions/63620377/ Quarkus with MapStruct & Lombok]
* [https://quarkus.io/guides/writing-native-applications-tips Tips for Writing Native Applications]
* [https://evrentan.medium.com/using-mapstruct-within-quarkus-8636af17a2ea Using MapStruct within Quarkus]
* [https://quarkus.io/guides/spring-scheduled Quarkus Spring Scheduled]
* [https://quarkus.io/guides/spring-data-jpa Quarkus Spring Data JPA]
* [https://quarkus.io/guides/redis Quarkus Redis Client]
* [https://quarkus.io/guides/redis Quarkus Redis Client]
* [https://mapstruct.org/news/2019-12-06-mapstruct-and-quarkus/ Quarkus MapStruct]
* [https://quarkus.io/guides/liquibase Quarkus Liquibase]
* [[MapStruct]]
* [[Lombok]]
| valign="top" |
* [https://blog.softwaremill.com/small-fast-docker-images-using-graalvms-native-image-99c0bc92e70b Small & fast Docker images using GraalVM]
* [https://www.batey.info/graalvm-docker-small-images.html Tiny docker images for Java with GraalVM]
* [https://quarkus.io/guides/kogito-dmn Quarkus Kogito Domain Model Notation]
* [https://www.graalvm.org/release-notes/version-roadmap/ GraalVM Community Version Roadmap]
* [https://quarkus.io/guides/building-my-first-extension Building My First Quarkus Extension]
* [https://stackoverflow.com/questions/tagged/quarkus Quarkus Stack Overflow]
* [https://quarkus.io/guides/cdi-reference Quarkus CDI Reference]
* [https://quarkus.io/guides/maven-tooling Quarkus Maven Tooling]
* [https://quarkus.io/guides/kogito-drl Quarkus Kogito Drools]
* [https://quarkus.io/guides/kogito Quarkus Kogito]
| valign="top" |
* [https://github.com/quarkusio/quarkus/issues/29857 Quarkus » Building a Native Image From Scratch]
* [https://www.graalvm.org/22.1/reference-manual/native-image/StaticImages/ Quarkus » Static and Mostly Static Images]
* [https://developers.redhat.com/articles/2021/12/14/explore-java-17-language-features-quarkus Java 17 language features with Quarkus]
* [https://quarkus.io/guides/building-native-image Quarkus » Building a Native Executable]
* [https://zeringue.io/post/graalvm-gradle-docker/ Build Slim Java Native Container]
* [https://quarkus.io/guides/ide-tooling Quarkus » IDE Tooling]
* [https://quarkus.io/guides/cli-tooling Quarkus » CLI Tooling]
* [https://github.com/graalvm/mandrel/releases Mandrel: Download]
* [[SDKMan]]
* [[Drools]]
|-
| colspan="3" |
----
|-
| valign="top" |
* [[Dropwizard]]


| valign="top" |
| valign="top" |

Latest revision as of 10:02, 26 October 2024

export GRAALVM_HOME=/d/opt/cli/mandrel-java11-21.2.0.0-Final
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export JAVA_HOME=$JAVA11_HOME

OR

export GRAALVM_HOME=/d/opt/cli/graalvm-ce-java11-21.2.0
export PATH=$JAVA11_HOME/bin:$PATH:$GRAALVM_HOME/bin
export JAVA_HOME=$JAVA11_HOME
gu install native-image
set GRAALVM_HOME=D:\opt\cli\mandrel-java11-21.2.0.0-Final
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set JAVA_HOME=%JAVA11_HOME%

OR

set GRAALVM_HOME=D:\opt\cli\graalvm-ce-java11-21.2.0
set PATH=%JAVA11_HOME%/bin;%PATH%;%GRAALVM_HOME%/bin
set JAVA_HOME=%JAVA11_HOME%
gu install native-image

Quarkus Build

git clone https://github.com/quarkusio/quarkus-quickstarts.git
cd ./quarkus-quickstarts/getting-started
# for windows 10 we should avoid symbolic link. instead of symbolic link
# we should use absolute project path either from command or gitbash
mvn package -Pnative -Dquarkus.native.container-runtime=docker -e
mvn package -Pnative -Dquarkus.native.container-build=true

mvn verify -Pnative -Dquarkus.native.container-runtime=docker -e
mvn verify -Pnative -Dquarkus.native.container-build=true
mvn compile  quarkus:dev
mvn package -Pnative
mvn verify  -Pnative
mvn package

Maven Artifact

mvn io.quarkus:quarkus-maven-plugin:2.1.3.Final:create \
    -DprojectGroupId=org.chorke.academia.rest \
    -DprojectArtifactId=getting-started \
    -DclassName="org.chorke.academia.rest.getting.started.GreetingResource" \
    -Dpath="/hello"
cd getting-started

After Build

: '
 ./quarkus-quickstarts/getting-started/target/
 ─────────────────────────────────────────────
   ├─ quarkus/bootstrap/test-app-model.dat
   ├─ quarkus-artifact.properties
   └─ quarkus-app/
      ├─ app/getting-started-1.0.0-SNAPSHOT.jar
      ├─ quarkus-app-dependencies.txt
      ├─ quarkus-run.jar
      ├─ quarkus/
      │  ├─ generated-bytecode.jar
      │  ├─ quarkus-application.dat
      │  └─ transformed-bytecode.jar

      └─ lib/
         ├─ main/
         └─ boot/
            ├─ io.quarkus.quarkus-development-mode-spi-2.1.3.Final.jar
            ├─ io.smallrye.common.smallrye-common-io-1.6.0.jar
            ├─ org.graalvm.sdk.graal-sdk-21.1.0.jar
            ├─ org.jboss.logging.jboss-logging-3.4.2.Final.jar
            ├─ org.jboss.logmanager.jboss-logmanager-embedded-1.0.9.jar
            └─ org.wildfly.common.wildfly-common-1.5.4.Final-format-001.jar
'

java -jar target/quarkus-app/quarkus-run.jar

Configuring

quarkus.banner.path=/META-INF/chorke/academia.txt
quarkus.banner.enabled=false

Knowledge

mvn package -Pnative -Dquarkus.native.container-build=true\
 -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel:21.1-java11

mvn package -Pnative -Dquarkus.native.container-build=true\
 -Dquarkus.native.container-runtime=docker

mvn package -Pnative -Dquarkus.native.container-build=true\
 -Dquarkus.native.container-runtime=podman

mvn package -Pnative -Dquarkus.native.container-build=true\
 -Dquarkus.container-image.build=true
docker build -f src/main/docker/Dockerfile.native\
 -t quarkus-quickstart/getting-started .

docker run -i --rm -p 8080:8080\
 quarkus-quickstart/getting-started
AAA : Authentication Authorization & Accounting
LDAP: Lightweight Directory Access protocol
SAML: Security Assertion Markup Language
RBAC: Role-Based Access Control
AoT : Ahead of Time Compilation
CDI : Central Programming Model
IdP : Identity Provider
SP  : Service Provider
OIDC: OpenID Connect

References