Ana içeriğe geç

1.2. Yeni Proje Oluşturulması#

EKSEN altyapısını kullanarak template proje üzerinden proje oluşturulabilir.

Template Proje Üzerinden Oluşturma#

  1. hvl-javalt-template projesi ismi uygun şekilde değiştirilerek kopyalanır. Örneğimizde bu isim hvl-example olarak değiştirildi.
  2. hvl-example projesi idea ile açılır.
  3. gradle.properties incelenir.
    • gradle.properties dosyasında proje içerisinde kullanılan versiyon bilgileri bulunmaktadır.
    • 1 numaralı kısım EKSEN gradle pluginlerinin versiyonlarını göstermektedir.
    • 2 numaralı kısım projenin/modülün versiyon bilgisini göstermektedir. Docker imajı çıkıldığında ve jar publish edildiğinde bu versiyon ile işaretlenmektedir.
    • 3 Proje içerisinden kullanılan kütüphane ve EKSEN altyapısı bağımlılığının versiyon bilgisini göstermektedir.
    • 4 Gradle ile ilgili ayarların bulunduğu bölümdür. Proje build olurken bu ayarlar kullanılır.
  4. settings.gradle incelenir.
    • rootProject.name satırı proje ismini belirtmektedir. Örneğimize göre hvl-example olarak değiştirilmelidir.
    • gradle.ext bölümünde gradle ve gradle pluginleri tarafından kullanılacak değişkenler bulunmaktadır.
    • //Modules tagi altındaki tanımlamalar projedeki modülleri göstermektektedir. Kendi proje yapınıza göre oluşturulacak modüllerin ilk kısmı burada tanımlanacaktır.
    • //Environment tagi altında genel olarak proje ile ilgili bilgiler, bağımlılıkların repository bilgileri ve docker pushlama işlemleri için docker repository bilgilerini barındırmaktadır.
    • project altındaki publishingInfo içerisinde birden fazla repository tanımlanabilmektedir. Bu repositoryler JAR pushlanacağı esnada kullanılabilecek repository'ler anlamına gelir ve bunlardan biri publishingScope bilgisine verilmelidir. Böylece gradle cleanAll build publish komutu çalıştırıldığında publishingScope bilgisindeki değere göre uygun repository'e JAR publish edilecektir.
    • project altındaki repositoriesInfo içerisinde birden fazla repository tanımlanabilmektedir. Bu repositoryler bağımlılıkların çözüleceği tanımlardır. Her bir tanım için birden fazla repository url'i tanımlanabilmektedir. Örnekteki bitnexus tanımındaki name alanı, .m2 altındaki settings.xml deki server id bilgisine karşılık gelmektedir ve bu repository'e giderken settings.xml deki username ve password bilgisi kullanılır. repositoriesInfo içerisinde tanımlanan değerlerden biri alt taraftaki repositoriesScope bilgisine verilmelidir.
    • project altındaki buildscriptRepositoriesInfo içerisinde birden fazla repository tanımlanabilmektedir. Burada tanımlanan repository bilgileri gradle pluginlerinin çözüleceği repository bilgileridir. buildscriptRepositoriesInfo içerisinde tanımlanan değerlerden biri alt taraftaki buildscriptRepositoriesScope bilgisine verilmelidir.
    • project altındaki dockerPublishingInfo içerisinde birden fazla repository tanımlanabilmektedir. Burada tanımlanan bilgiler docker repository bilgileridir. Örnekteki harbor tanımındaki name alanı, .docker altındaki settings.xml deki server id bilgisine karşılık gelmektedir ve bu repository'e giderken settings.xml deki username ve password bilgisi kullanılır. Proje içerisindeki gradle cleanAll build dockerPush komutu çağrıldığında alt tarafta tanımlanan dockerPublishingScope değerine göre docker imajı publish edilir.
    • gradle.projectsLoaded bölümü genelde sabit kalmaktadır. Bu bölümde bağımlılıklar için ihtiyaç duyulan gradle plugin bağımlılıkları eklenmiştir ve bu bağımlılıkların çekilebilmesi için environment kısmında tanımlanan repositoryler projeye tanımlanmıştır.
    • En alt bölümde include ve project işlemleri ile en yukarda //Modules kısmında yapılan tanımlar projeye dahil edilmiştir.
  5. build.gradle incelenir.
    • project tanımlamaları, settings.gradle da yapılan tanımları içerir. Burada version ile modülün versiyon bilgisi belirtilir. ext altındaki publishable değeri modülün repository'e publish edilebilir olduğu anlamına gelir. publishType ise modülün publish türünü belirtir, buradaki değerler BOM, JAR, ve EXECUTABLE_JAR değerlerini alabilir.
      • BOM: Parent olarak kullanılacak, sadece pom.xml üretip publish etmek isteyen modüllerde kullanılır.
      • JAR: Sadece jar üretilip repository'e publish edilecek modüllerde kullanılır. (Ör. Client, common, provider modüller)
      • EXECUTABLE_JAR: Bu tür sadece server modüllerde kullanılır ve docker imajı oluşturulmak istendiğinde bu türe ait modüller taranarak docker imajları oluşturulur. Server modüllerinde publishable değerleri genelde false'dır.
    • allprojects altındaki tanımlamalar her proje için genelde sabittir ve root proje dahil tüm alt modüllerde devrede olan bölümdür. Sadece group bilgisi değiştirilmesi gerekmektedir. group bilgisi, repositorydeki group bilgisine denk gelmektedir.
    • subprojects altındaki tanımlamalar her proje için genelde sabittir ve root proje hariç tüm alt modüllerde devrede olan bölümdür. Bu bölümde mavenBom tanımlamaları yapılmaktadır ve örnekte EKSEN bom'u verilmiştir.
      dependencyManagement {
          imports {
              mavenBom "tr.com.havelsan.framework:hvl-javalt-framework-parent:$hvlJavaltFrameworkParentVersion"
          }
      }
      
    • dependencies altındaki tanımlamalar her proje için genelde sabit olup alt modüllerin ihtiyaç duyacağı, EKSEK bağımlılıklarını da içeren temel bağımlılıkları içermektedir.