Spring Plugin#
Plugin sayesinde Gradle ile Spring teknolojilerinin kullanılmasını sağlamaktadır.
Yetenekleri#
- Docker oluşturma işlemini sağlar.
- Spring Boot'un
toolsjarmode özelliği (-Djarmode=tools) ile katmanlı (layered) Docker imagelarının oluşturulmasını destekler. - 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.propertiesve konfigürasyon verilerini kullanmamızı sağlar. - IntelliJ IDEA run konfigürasyonlarına (
.run/*.xml) otomatik olarak SkyWalking agent entegrasyonu yapabilir.
Kullanım#
Projelere iki farklı yöntem ile eklenebilmektedir. Yöntemler şunlardır:
Buildscript kullanımı
Pluginin birçok konfigürasyon 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
}
}
skywalking {
agentVersion = '9.6.0'
agentPath = System.getProperty("user.home") + '.hvl-gradle-spring-plugin/tools/skywalking-agent-${agentVersion}/skywalking-agent/skywalking-agent.jar'
log4j2Async = true
}
}
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 |
|---|---|---|---|
| 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. | |
| skywalking | HvlSkywalkingExtension | SkyWalking 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
-DversionSuffixparametresi kullanılabilir.Oluşturulacak jar'ın profile değerini ezmek için
-Dspring.profiles.activeparametresi kullanılabilir.
docker konfigürasyon tablosu:
| Konfigürasyon | Tip | Açıklama | Varsayılan Değer |
|---|---|---|---|
| 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() |
skywalking konfigürasyon tablosu:
| Konfigürasyon | Tip | Açıklama | Opsiyonel | Varsayılan Değer |
|---|---|---|---|---|
| agentVersion | String | İndirilecek SkyWalking agent versiyonudur. agentPath verilmediğinde kullanılır. | Evet | 9.6.0 |
| agentPath | String | SkyWalking agent jar dosyasının tam yol bilgisidir. Verilmezse agent otomatik indirilir. | Evet | $USER_HOME$/.hvl-gradle-spring-plugin/tools/skywalking-agent-${agentVersion}/skywalking-agent/skywalking-agent.jar' |
| log4j2Async | Boolean | Log4j2 asenkron loglama mekanizması için contextSelector argümanıdır. | Evet | true |
agentPathbelirtilmediği durumlarda,skywalkingEnabletaski çalıştırıldığında SkyWalking agent belirtilen versiyona göre Apache mirror üzerinden otomatik olarak indirilir ve~/.hvl-gradle-spring-plugin/tools/dizinine çıkartılır. Agent daha önce indirilmişse tekrar indirilmez.
skywalkingEnabletaski çalıştırıldığında, VM parametrelerine otomatik olarak-DSW_AGENT_NAME={project.name}eklenir. Bu sayede SkyWalking arayüzünde servisler proje isimleri ile görünür.
Plugin proje içinde ide üzerinden veya konsol ile kullanılabilir.
Konsol kullanımı
Local docker içerisine image oluşturmayı sağlamaktadır. Bu işlem öncesinde runToolsJar taskı otomatik olarak çalıştırılır ve Spring Boot -Djarmode=tools özelliği kullanılarak jar katmanları Docker build için dışarı çıkarılı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
- dockerPublishingName
- dockerPublishingUrl
Kullanım şekli:
gradle cleanAll dockerPush -Dprofiles.active=general
gradle cleanAll dockerPush -DdockerPublishingName=harbor-master-key -DdockerPublishingUrl=harbor.bulut.ai/myrepo
IntelliJ IDE üzerindeki .run/*.xml konfigürasyon dosyalarına SkyWalking agent VM argümanlarını otomatik olarak ekler.
agentPathbelirtilmemişse, SkyWalking agent jar'ını Apache mirror üzerinden otomatik indirip~/.hvl-gradle-spring-plugin/tools/dizinine çıkartır.- VM parametrelerine
-javaagent,-DSW_AGENT_NAME={project.name}ve (eğer aktifse)-Dlog4j2.contextSelectorargümanlarını ekler.
Kullanım şekli:
gradle skywalkingEnable
IntelliJ IDE üzerindeki .run/*.xml konfigürasyon dosyalarından SkyWalking agent ile ilgili tüm VM argümanlarını (-javaagent, -DSW_AGENT_NAME, -Dlog4j2.contextSelector) temizler.
Kullanım şekli:
gradle skywalkingDisable
SkyWalking agent kurulumu ve kullanımı için gerekli VM opsiyon bilgilerini görüntüler.
Kullanım şekli:
gradle skywalkingInfo
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.10'
],
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
}
}
skywalking {
agentPath = System.getProperty("user.home") + '/.hvl-gradle-spring-plugin/tools/skywalking-agent-${agentVersion}/skywalking-agent.jar'
agentVersion = '9.6.0'
log4j2Async = true
}
}
Dockerfile kullanımı
Bu örnek Dockerfile, hvl-gradle-spring-plugin ile uyumlu çalışmakta olup, herhangi bir değişiklik yapmadan direkt kullanabileceğiniz bir örnektir.