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:
Buildscript kullanımı
Pluginin birçok konfigurasyon parametresi bulunmaktadır. Proje içerisinde kullanımı ve parametreler aşağıdaki gibidir.
Konfigurasyon yapısı#
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
}
}
}