Ana içeriğe geç

Spring Plugin#

Plugin sayesinde Gradle ile Spring teknolojilerinin kullanılmasını sağlamaktadır.

Yetenekleri#

  • Docker oluşturma işlemini sağlar.
  • Oluşturulan docker'ın belirlenmiş docker repository'e kolayca yüklenmesini sağlar.
  • Belirlenmiş profiller yardımı ile oluşturulacak jar veya docker'ın parçalara bölünmesini sağlar. Böylece farklı kullanımlar için "thin" ve "fat" jar'lar oluşturulabilir.
  • Spring projesi içerisinde gradle.properties ve konfigürasyon verilerini kullanmamızı sağlar.

Kullanım#

Projelere iki farklı yöntem ile eklenebilmektedir. Yöntemler şunlardır:

DSL kullanımı

build.gradle
plugins {
    id 'hvl-spring-plugin' version hvlSpringPluginVersion
}

Buildscript kullanımı

build.gradle
buildscript {
    repositories {
        maven {
            url 'http://nexus.bulut.ai/repository/framework-plugin-group/'
        }
    }
    dependencies {
        classpath(group: 'tr.com.havelsan.plugin', name: 'hvl-gradle-spring-plugin', version: hvlSpringPluginVersion)
    }
}

apply plugin: 'hvl-spring-plugin'

Pluginin birçok konfigurasyon parametresi bulunmaktadır. Proje içerisinde kullanımı ve parametreler aşağıdaki gibidir.

Konfigurasyon yapısı#

build.gradle
hvlSpring {
    String bpmnServerName = 'hvl-bpmn-server'
    Project adminServerProject = project(gradle.adminStarterProjectName)
    String adminServerName = 'hvl-bpmn-admin-server'
    Project engineServerProject = project(gradle.engineStarterProjectName)
    String engineServerName = 'hvl-bpmn-engine-server'
    profile {
        enabled = true
        info = [
                'admin' : [
                        archiveName: adminServerName,
                        name       : adminServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': adminServerName, 'CONTAINER_JAR_FILE': adminServerName],
                        project    : [adminServerProject]],
                'engine': [
                        archiveName: engineServerName,
                        name       : engineServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': engineServerName, 'CONTAINER_JAR_FILE': engineServerName],
                        project    : [engineServerProject]],
                'all'   : [
                        archiveName: bpmnServerName,
                        name       : bpmnServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': bpmnServerName, 'CONTAINER_JAR_FILE': bpmnServerName],
                        project    : [adminServerProject, engineServerProject]]
        ]
    }
    docker {
        settingsXmlFilePath = gradle.environment.docker.settingsXmlFilePath
        dockerfile = file(gradle.environment.docker.dockerFilePath)
        publishing {
            info = gradle.environment.project.dockerPublishingInfo
            scope = gradle.environment.project.dockerPublishingScope
        }
    }
}

Genelde projelerde yukarıdaki şekilde kullanılmaktadır ancak bunun dışında bir çok konfigürasyon mevcuttur.

hvlSpring konfigürasyon tablosu:

Konfigürasyon Tip Açıklama Varsayılan Değer
project Project İşlem yapılacak proje bilgisidir. Mevcut proje (project)
archiveName String Oluşturulacak dosyanın isim bilgisidir. Mevcut proje ismidir. (project.getName())
outputJarPath String Oluşturulacak jar'ın path bilgisidir. {user.home}/.hvl-gradle-spring-plugin/{project.name}
profile HvlProfileExtension Profile konfigürasyonudur.
docker HvlDockerExtension Docker konfigürasyonudur.

profile konfigürasyon tablosu:

Konfigürasyon Açıklama Varsayılan Değer
enabled Boolean Profillemenin devrede olup olmadığı bilgisidir. false
info Map> Her bir profilin özelliklerinin verildiği alandır.
profile String Jar oluşturulurken kullanılacak profil bilgisidir. Bu değer komut satırından -Dspring.profiles.active şeklinde de verilebilmektedir. all

Oluşturulacak jar'ın versionSuffix değerini ezmek için -DversionSuffix parametresi kullanılabilir.

Oluşturulacak jar'ın profile değerini ezmek için -Dspring.profiles.active parametresi kullanılabilir.

docker konfigürasyon tablosu:

Konfigürasyon Tip Açıklama Varsayılan Değer
project Project İşlem yapılacak proje bilgisidir. false
settingsXmlFilePath String Docker pushlamak için giriş bilgilerinin bulunduğu dosya path'idir. System.getProperty("user.home") + '/.docker/settings.xml
autoLogout boolean İşlem tamamlandıktan sonra docker repository'den otomatik logout yapılıp yapılmayacağı bilgisidir. false
name String Oluşacak docker'ın isim bilgisidir. Profile içindeki infoda bu bilgi varsa öncelikli olarak profil içindeki kullanılır.
dockerfile File File türünden dockerFile bilgisidir. project.file("Dockerfile")
dependencies Set Docker oluşturma işlemi öncesi çalışması istenen task bilgileridir.
tags Set Oluşturulacak docker'a verilecek tag bilgileridir.
namedTags Map Oluşturulacak docker'a verilecek tag bilgileridir. (taskName, tagName)
labels Map Docker oluştururken cli'daki --label argümanına denk gelen bilgidir.
buildArgs Map Docker oluştururken cli'daki --build-arg argümanına denk gelen bilgidir. Profile içindeki infoda bu bilgi varsa öncelikli olarak profil içindeki kullanılır.
pull boolean Docker oluştururken cli'daki --pull argümanına denk gelen bilgidir. false
noCache boolean Docker oluştururken cli'daki --no-cache argümanına denk gelen bilgidir. false
network String Docker oluştururken cli'daki --network argümanına denk gelen bilgidir.
additionalCopyPaths String[] Docker üretilirken içerisine kopyalanmak istenen dosyaların path bilgisidir.
copySpec CopySpec Dosya işlemleri için kullanılan copyspec nesnesidir. project.copySpec()


Plugin proje içinde ide üzerinden veya konsol ile kullanılabilir.

Konsol kullanımı

Local docker içerisine image oluşturmayı sağlamaktadır.

Parametreler:

  • spring.profiles.active
  • profiles.active

Kullanım şekli:

gradle cleanAll docker -Dspring.profiles.active=tasks

Remote docker repository'e image oluşturup göndermeyi sağlamaktadır.

Parametreler:

  • spring.profiles.active
  • profiles.active

Kullanım şekli:

gradle cleanAll dockerPush -Dprofiles.active=general

Ide üzerinden kullanımı

Proje içerisinde örnek kullanım şekli:

settings.gradle kullanımı
gradle.ext {
    // Environment
    environment = [
            java    : [
                    info               : '21.0.1 (21.0.1-oracle)',
                    sourceCompatibility: 21,
                    targetCompatibility: 21
            ],
            gradle  : [
                    info: '8.5'
            ],
            encoding: [
                    type: 'UTF-8'
            ],
            maven   : [
                    settingsXmlFilePath: System.getProperty("user.home") + '/.m2/settings.xml'
            ],
            docker  : [
                    dockerFilePath     : rootDir.toString() + '/resources/docker/Dockerfile',
                    settingsXmlFilePath: System.getProperty("user.home") + '/.docker/settings.xml'
            ],
            project : [
                    publishingInfo              : [
                            release_bitnexus : [versionSuffix: '',
                                                name         : 'framework-nexus-supervisor',
                                                url: 'http://nexus.bulut.ai/repository/framework-releases/'],
                            snapshot_bitnexus: [versionSuffix: '-SNAPSHOT',
                                                name         : 'framework-nexus-snapshots',
                                                url: 'http://nexus.bulut.ai/repository/framework-snapshots/'],
                    ],
                    repositoriesInfo            : [
                            online  : [[url: ['https://repo.spring.io/release/'
                                              , 'https://repo.spring.io/snapshot/'
                                              , 'https://repo.spring.io/libs-release/'
                                              , 'https://repo.spring.io/libs-milestone-local/'
                                              , 'https://repo.spring.io/libs-release-local/'
                                              , 'https://repo.maven.apache.org/maven2/'
                                              , 'https://repo.spring.io/milestone/'
                                              , 'https://repo.gradle.org/gradle/libs-releases-local/'
                                              , 'https://jcenter.bintray.com/'
                                              , 'https://mvnrepository.com/artifact/'
                                              , 'https://plugins.gradle.org/m2/']]],
                            bitnexus: [[name: 'framework-nexus-dev',
                                        url: ['http://nexus.bulut.ai/repository/framework-group/']]],
                    ],
                    buildscriptRepositoriesInfo : [
                            online  : ['https://plugins.gradle.org/m2/'],
                            bitnexus: ['http://nexus.bulut.ai/repository/framework-plugin-group/']
                    ],
                    dockerPublishingInfo        : [
                            offline: [url: 'docker.local'],
                            harbor : [name: 'framework-harbor-master',
                                      url: 'harbor.bulut.ai/framework']
                    ],
                    publishingScope: 'snapshot_bitnexus',
                    repositoriesScope           : 'bitnexus',
                    buildscriptRepositoriesScope: 'bitnexus',
                    dockerPublishingScope       : 'harbor'
            ],
    ]
}
build.gradle kullanımı
hvlSpring {
    String bpmnServerName = 'hvl-bpmn-server'
    Project adminServerProject = project(gradle.adminStarterProjectName)
    String adminServerName = 'hvl-bpmn-admin-server'
    Project engineServerProject = project(gradle.engineStarterProjectName)
    String engineServerName = 'hvl-bpmn-engine-server'
    profile {
        enabled = true
        info = [
                'admin' : [
                        archiveName: adminServerName,
                        name       : adminServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': adminServerName, 'CONTAINER_JAR_FILE': adminServerName],
                        project    : [adminServerProject]],
                'engine': [
                        archiveName: engineServerName,
                        name       : engineServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': engineServerName, 'CONTAINER_JAR_FILE': engineServerName],
                        project    : [engineServerProject]],
                'all'   : [
                        archiveName: bpmnServerName,
                        name       : bpmnServerName,
                        version    : moduleVersion,
                        buildArgs  : ['RESOURCE_JAR_FILE': bpmnServerName, 'CONTAINER_JAR_FILE': bpmnServerName],
                        project    : [adminServerProject, engineServerProject]]
        ]
    }
    docker {
        settingsXmlFilePath = gradle.environment.docker.settingsXmlFilePath
        dockerfile = file(gradle.environment.docker.dockerFilePath)
        publishing {
            info = gradle.environment.project.dockerPublishingInfo
            scope = gradle.environment.project.dockerPublishingScope
        }
    }
}