Tag: maven

Blog Başlıkları

Merhabalar,

Aklımda yüze yakın sayıda blog konusu var. Bunları yazmak isterim ama tipik Y kuşağı insanı olduğumdan hiçbirşey yapmamak daha cazip geliyor.

Tabi, o kadar da değil; yazıcam bu blogları. Buraya aklımdaki blog başlıklarını not etmek, ilerde de yazdıkça burada üzerini çizmek istiyorum.

Listeye şöyle başlıyorum:

  • Arduino İle Digital Port Dinlemek
  • Maven Parent <> Dependency Versiyon İlişkisi
  • Maven Deneyimlerim
  • Jenkins Hakkındaki Yorumlarım
  • Docker Hakkındaki Yorumlarım
  • Coordinate Clustering (DBSCAN Algorithm)

İlk Spring Boot Uygulaması

Bu yazıdaki hedefimiz spring boot’un derinlerine inmek değil, hello-world uygulama yazıp, çalıştırılabilir .jar olarak paketleyip servisin çalışırlığını test etmektir.

Başlamadan önce biraz bahsetmek isterim. Spring boot, eskide kalan ve uygulama sunucusuna ihtiyaç duyan .war paketi yerine tüm ihtiyaçlarını .jar paketi içinde toparlamayı sağlayan bir Spring framework kütüphanesidir. En temel özelliği, yazılacak uygulamanın servis katmanını, istenilen methodlar veya interface method signature’ları üzerindeki notasyonlar ile kolaylıkla yönetebilmektir.

Hızlıca günün gereksinimlerini açıklayayım:

  • maven 3.0 +

  • java 1.8

  • Ide (eclipse)

1. Method ve Notasyonları

Klasik bir maven projesi oluşturup, “hello-world” yazdırabilmek için App.java sınıfını şu şekilde düzenliyoruz. Daha başka konfigurasyona ihtiyaç duymadan servisimizi kullanılabilir hale getiriyoruz…

Aşağıdaki commentlerde hangi satırın ne işe yaradığı açıklanmaktadır.

@EnableAutoConfiguration
@RestController
public class App {
public static void main(String[] args) { // starter method
SpringApplication.run(App.class, args); // spring boot uygulaması burada tetikleniyor.
}

@RequestMapping(“/”) // request mapping sağlanıyor. şimdilik sadece root dizininde, parametresiz, yalın bir çağırım gerçekleştiriliyor.
public String home() {
return “Hello Docker World”;
}
}

2. Bağımlılıklar ve Parent

Kodu yazdıktan sonra .pom dosyasına sadece şu dependency’leri eklememiz yeterli olacaktır:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>

Projenin parent’i olarak spring-boot-starter-parent belirliyoruz. Bu parent projenin .jar olarak start edilebilmesini sağlayacak olan manifestleri içermektedir. Bir konfigurasyon beklememektedir. Eğer parent’i eklemek istemezseniz manifest ve diğer konfigurasyonları manuel yapmanız gerekecektir. <dependencies> node’unun üstüne / dışına yazmamız uygun olacaktır.

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>

Eğer “parent kullanmak istemiyorum. Projemdeki jpa’nın persistence dosyası veya diğer bağımlılıklar ile çakışmalar yaratıyor” diyorsanız spring-boot-maven-plugin eklentisini aşağıdaki ikinci yöntem gibi düzenleyebilirsiniz.

3. Plugin’ler

Aşağıda targetteki java sürümünü 1.8 olarak belirlememizi sağlayan compiler plugin ve spring boot’u executable package haline getirmemizi sağlayan eklentiler yer almaktadır.

Maven compiler plugin, projenin diğer bağımlılıklarını .jar dosyasına include etmeyi sağlar. Ayrıca bu plugin ile compiling jre version belirlenebilir.

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

Parent’i kullanıyorsanız:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin></plugins></build>

Parent’i kullanmadan:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
<configuration>
<mainClass>com.test.App</mainClass>
<finalName>${project.build.finalname}</finalName>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

Yukarda spring-boot ile paketleme işlemi yaptık. Normal paketleme executable package oluşturamıyor; spring boot’a özel paketleme gerekiyor. Ayrıca yukarıda görüldüğü gibi bir main class ve harici output dir verilebiliyor.

4. Packaging

Benim kullandığım projede “jpa ile ilgili problemlerimi” görmezden gelirsek, sadece mvn package çalıştırarak paketimizi oluşturabiliyoruz.

mvn clean package spring-boot:repackage

5. Start

Sonrasında windows konsolu, linux konsolu veya Jenkins CI Tool ile aşağıdaki kodu tetikleyerek servisi çalışır hale getirebiliriz.

java -jar bootsample.jar

Not: Ben docker içinde kullanacağım için işim henüz bitmedi. Docker’in image’ında çalışma ortam bilgileri de set edilmesi gerekiyormuş… araştırmaya devam edeceğim ve bir container içinde harici kaynaklar ile çalışan bir uygulama yazacağım.

Saygılarımla

sefersezer@gmail.com

Console Maven Projesine Web Projesi Özelliği Katmak

Merhabalar,

Daha önce File/new/maven project… yolunu kullanarak oluşturduğunuz bir projeyi web’de yayınlama ihtiyacı hissettiniz. Projeyi web projesine dönüştürebilmemiz için gerekli anahtar kelime FACETS!.

Projeye adına tıkladıktan sonra ALT+Enter ile proje özelliklerini açtıktan sonra search kısmına Facets yazalım. Burada Project Facets‘i bulacağız. Facets geldikten sonra da Javascript ve JavaServer Facets olarak seçmemiz yeterli olacaktır. JavaServer Facets sürümü 2.2 desteklemiyor ise 2.1 seçerek ve application server tipimi seçerek burada işimi bitirebilirim.

Bu arada benim bahsi geçen projemin gereksinimi olmadığından “Further Configuration Available” seçeneğinden Jsf implementation library’i disable edebilirim.

Burada maven projesini maven web projesine çevirdik. Tomcat gibi web application server altında yayınlamak için Projeyi, web projesi olarak yayınlamak için packaging tipini jar yerine war olarak değiştirmemiz gerektiği gibi diğer gereksinimleri biliyor olduğumuzu farzediyorum. Olmadı sefer.social@gmail.com adresine mail atın iki geyik yaparız…

Adsız