Quarkus Dersleri : Uygulama Native Derleme
Quarkus Dersleri‘ne devam ediyoruz.
Bu yazımızda Quarkus uygulamızı navite olarak derlemeyi ve çalıştırmayı göreceğiz. Quarkus’un en büyük ve en yararlı yanlarından biri olan native derleme işlemini sıkça kullanacağımı düşünerek not etmek istedim.
Quarkus projemizi native olarak derlemek ve çalıştırabilmek için GraalVM’e ihtiyacımız bulunmaktadır. Öncelikle Quarkus Native uygulama derlemek için GraalVM’i bilgisayarımıza kuralım.
GraalVM, Java’da uygulanan HotSpot / OpenJDK tabanlı bir Java VM ve JDK’dır. Hızlı başlatma ve düşük bellek alanı için Java uygulamalarının önceden derlenmesi gibi ek programlama dillerini ve yürütme modlarını destekler. wikipedia.com
GraalVM Kurulumu
Bu kurulumu Linux işletim sistemi için anlatacağım.
Öncelikle https://github.com/graalvm/graalvm-ce-builds/releases adresinden indiriyoruz. İndirdiğimiz dosyayı kuruyoruz.
tar -xzf dosyaadi.tar.gz
Code language: CSS (css)
Sonrasında ise alias olarak tanımlamalarımız yapıyoruz.
export PATH=<graalvm>/bin:$PATH
export JAVA_HOME=<graalvm>
export GRAALVM_HOME=$HOME/graalvm/
##native image yüklüyoruz
${GRAALVM_HOME}/bin/gu install native-image
Code language: PHP (php)
Quarkus Uygulaması
Basit bir Quarkus uyglaması yapacağız. Bu Quarkus uygulamamızı native olarak çalıştıracağız.
Uygulamamız basit bir javax.rs uygulaması olacak.
@Path("/hello")
public class ExampleResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String merhaba() {
return "Burak KUTBAY";
}
}
Code language: PHP (php)
Uygulamamızın native olarak derleneceğini maven’a bildirmemiz gerekiyor. Bunun için Quarkus paket tipi özelliğini native olarak belirteceğiz.
<profiles>
<profile>
<id>native</id>
<properties>
<quarkus.package.type>native</quarkus.package.type>
</properties>
</profile>
</profiles>
Code language: HTML, XML (xml)
Eğer uygulamamızda bu satır varsa Quarkus projeniz navite olarak derlenmeye hazır demektir.
Quarkus uygulamamızı native olarak derlemek için kodumuzu girelim.
./mvnw package -Pnative
Quarkus uygulamamızın çıktısı aşağıdaki gibi olacaktır.
[INFO] Scanning for projects...
[INFO] -----------< com.burakkutbay:quarkus-native-uygulama-ornegi >-----------
[INFO] Building quarkus-native-uygulama-ornegi 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.10.5.Final:generate-code (default) @ quarkus-native-uygulama-ornegi ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quarkus-native-uygulama-ornegi ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ quarkus-native-uygulama-ornegi ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:1.10.5.Final:dev (default-cli) @ quarkus-native-uygulama-ornegi ---
Listening for transport dt_socket at address: 5005
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2020-12-28 23:20:20,445 INFO [io.quarkus] (Quarkus Main Thread) quarkus-native-uygulama-ornegi 1.0-SNAPSHOT on JVM (powered by Quarkus 1.10.5.Final) started in 0.917s. Listening on: http://localhost:8080
2020-12-28 23:20:20,447 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2020-12-28 23:20:20,447 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy]
^C2020-12-28 23:20:31,108 INFO [io.quarkus] (Shutdown thread) quarkus-native-uygulama-ornegi stopped in 0.003s
~/quarkus-native-uygulama-ornegi ./mvnw package -Pnative.
INT ✘ 16s 23:20:31
Warning: JAVA_HOME environment variable is not set.
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< com.burakkutbay:quarkus-native-uygulama-ornegi >-----------
[INFO] Building quarkus-native-uygulama-ornegi 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- quarkus-maven-plugin:1.10.5.Final:generate-code (default) @ quarkus-native-uygulama-ornegi ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quarkus-native-uygulama-ornegi ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ quarkus-native-uygulama-ornegi ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- quarkus-maven-plugin:1.10.5.Final:generate-code-tests (default) @ quarkus-native-uygulama-ornegi ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ quarkus-native-uygulama-ornegi ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory quarkus-native-uygulama-ornegi/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ quarkus-native-uygulama-ornegi ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ quarkus-native-uygulama-ornegi ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.burakkutbay.ExampleResourceTest
2020-12-28 23:21:50,105 INFO [io.quarkus] (main) Quarkus 1.10.5.Final on JVM started in 1.448s. Listening on: http://localhost:8081
2020-12-28 23:21:50,119 INFO [io.quarkus] (main) Profile test activated.
2020-12-28 23:21:50,119 INFO [io.quarkus] (main) Installed features: [cdi, resteasy]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.119 s - in com.burakkutbay.ExampleResourceTest
2020-12-28 23:21:51,553 INFO [io.quarkus] (main) Quarkus stopped in 0.046s
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ quarkus-native-uygulama-ornegi
[INFO] --- quarkus-maven-plugin:1.10.5.Final:build (default) @ quarkus-native-uygulama-ornegi ---
[INFO] [org.jboss.threads] JBoss Threads version 3.1.1.Final
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /quarkus-native-uygulama-ornegi/target/quarkus-native-uygulama-ornegi-1.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 881ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Code language: CSS (css)
Böylelikle Quarkus uygulamamız native olarak build edildi. Build edilen Quarkus native uygulamamız
/quarkus-native-uygulama-ornegi/target/quarkus-native-uygulama-ornegi-1.0-SNAPSHOT-runner
yolunda bulabiliriz ve Quarkus Uygulama Örneğimizi Native Derlenmiş olan programımızı çalıştırabiliriz.
No Comment! Be the first one.