Quarkus

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

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

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";
    }
}

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>

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] ------------------------------------------------------------------------

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.


Önceki Ders: Quarkus Rest Api Uygulaması Yapmak
Quarkus Dersleri
Sonraki Ders: Quarkus Panache

More in:Quarkus

Bunlara Gözat

Yorum Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir