Skip to content

Commit 6cf3881

Browse files
committed
Initial gradle support
1 parent eae23e2 commit 6cf3881

19 files changed

+945
-5
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,6 @@ build/
4242
*.tgz
4343

4444
/docker/*.override.yaml
45+
out/
46+
node_modules/
47+
.gradle

api/build.gradle

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
2+
plugins {
3+
id 'antlr'
4+
id 'checkstyle'
5+
id 'org.springframework.boot' version '3.4.1'
6+
id 'com.gorylenko.gradle-git-properties' version "2.4.2"
7+
}
8+
9+
dependencies {
10+
implementation project(":contract")
11+
implementation project(":frontend")
12+
implementation project(":serde-api")
13+
14+
implementation libs.spring.starter.webflux
15+
implementation libs.spring.starter.security
16+
implementation libs.spring.starter.actuator
17+
implementation libs.spring.starter.logging
18+
implementation libs.spring.starter.oauth2.client
19+
implementation libs.spring.boot.actuator
20+
compileOnly libs.spring.boot.devtools
21+
22+
implementation libs.spring.security.ldap
23+
24+
implementation libs.kafka.clients
25+
26+
implementation libs.apache.avro
27+
implementation libs.apache.commons
28+
implementation libs.apache.commons.pool2
29+
implementation libs.apache.datasketches
30+
31+
implementation libs.confluent.schema.registry.client
32+
implementation libs.confluent.avro.serializer
33+
implementation libs.confluent.protobuf.serializer
34+
implementation libs.confluent.json.schema.serializer
35+
36+
implementation libs.aws.msk.auth
37+
implementation (libs.azure.identity) {
38+
exclude group: 'io.netty', module: 'netty-tcnative-boringssl-static'
39+
}
40+
41+
implementation libs.jackson.databind.nullable
42+
implementation libs.cel
43+
antlr libs.antlr
44+
implementation libs.antlr.runtime
45+
46+
implementation libs.opendatadiscovery.oddrn
47+
implementation (libs.opendatadiscovery.client) {
48+
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-webflux'
49+
exclude group: 'io.projectreactor', module: 'reactor-core'
50+
exclude group: 'io.projectreactor.ipc', module: 'reactor-netty'
51+
}
52+
53+
runtimeOnly libs.micrometer.registry.prometheus
54+
55+
// CVE Fixes
56+
implementation libs.apache.commons.compress
57+
implementation libs.okhttp3.logging.intercepter
58+
59+
// Annotation processors
60+
implementation libs.lombok
61+
implementation libs.mapstruct
62+
annotationProcessor libs.lombok
63+
annotationProcessor libs.mapstruct.processor
64+
annotationProcessor libs.spring.boot.configuration.processor
65+
testAnnotationProcessor libs.lombok
66+
testAnnotationProcessor libs.mapstruct.processor
67+
68+
// Tests
69+
testImplementation libs.spring.starter.test
70+
testImplementation libs.reactor.test
71+
testImplementation libs.testcontainers
72+
testImplementation libs.testcontainers.kafka
73+
testImplementation libs.testcontainers.jupiter
74+
testImplementation libs.junit.jupiter.engine
75+
testImplementation libs.mockito.core
76+
testImplementation libs.mockito.jupiter
77+
testImplementation libs.bytebuddy
78+
testImplementation libs.assertj
79+
testImplementation libs.jsonschemavalidator
80+
81+
testImplementation libs.okhttp3
82+
testImplementation libs.okhttp3.mockwebserver
83+
}
84+
85+
generateGrammarSource {
86+
maxHeapSize = "64m"
87+
arguments += ["-package", "ksql"]
88+
}
89+
90+
sourceSets {
91+
main {
92+
antlr {
93+
srcDirs = ["src/main/antlr4"]
94+
}
95+
java {
96+
srcDirs += generateGrammarSource.outputDirectory
97+
}
98+
}
99+
}
100+
101+
tasks.withType(Checkstyle) {
102+
exclude '**/ksql/**'
103+
}
104+
105+
checkstyle {
106+
toolVersion '10.3.1'
107+
configFile = rootProject.file('etc/checkstyle/checkstyle-e2e.xml')
108+
ignoreFailures = false
109+
maxWarnings = 0
110+
maxErrors = 0
111+
}
112+
113+
test {
114+
useJUnitPlatform()
115+
}

api/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,10 @@
440440
<goal>copy-resources</goal>
441441
</goals>
442442
<configuration>
443-
<outputDirectory>${basedir}/target/classes/static</outputDirectory>
443+
<outputDirectory>${basedir}/target/classes/</outputDirectory>
444444
<resources>
445445
<resource>
446-
<directory>../frontend/build</directory>
446+
<directory>../frontend/build/vite/static</directory>
447447
</resource>
448448
</resources>
449449
</configuration>

api/src/main/java/io/kafbat/ui/config/WebclientProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.kafbat.ui.config;
22

33
import io.kafbat.ui.exception.ValidationException;
4-
import javax.annotation.PostConstruct;
4+
import jakarta.annotation.PostConstruct;
55
import lombok.Data;
66
import org.springframework.boot.context.properties.ConfigurationProperties;
77
import org.springframework.context.annotation.Configuration;

api/src/main/java/io/kafbat/ui/config/auth/RoleBasedAccessControlProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.kafbat.ui.config.auth;
22

33
import io.kafbat.ui.model.rbac.Role;
4+
import jakarta.annotation.PostConstruct;
45
import java.util.ArrayList;
56
import java.util.List;
6-
import javax.annotation.PostConstruct;
77
import org.springframework.boot.context.properties.ConfigurationProperties;
88

99
@ConfigurationProperties("rbac")

build.gradle

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
subprojects {
2+
apply plugin: "java"
3+
4+
repositories {
5+
mavenCentral()
6+
maven {
7+
name = 'confluent'
8+
url = 'https://packages.confluent.io/maven/'
9+
}
10+
}
11+
12+
group = 'io.kafbat'
13+
version = version
14+
15+
java {
16+
sourceCompatibility = JavaVersion.VERSION_21
17+
targetCompatibility = JavaVersion.VERSION_21
18+
}
19+
}
20+
21+
boolean resolveBooleanProperty(String propertyName, boolean defaultValue = false) {
22+
def propertyValueStr = findProperty(propertyName)
23+
return propertyValueStr == null ? defaultValue : propertyValueStr.toBoolean();
24+
}
25+
26+
ext {
27+
prod = resolveBooleanProperty("prod")
28+
}
29+
30+
31+

contract/build.gradle

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
2+
3+
plugins {
4+
id "java-library"
5+
id 'org.openapi.generator' version '7.9.0'
6+
}
7+
8+
9+
def specDir = project.layout.projectDirectory.dir("src/main/resources/swagger/")
10+
def targetDir = project.layout.buildDirectory.dir("generated").get()
11+
12+
dependencies {
13+
implementation libs.spring.starter.webflux
14+
implementation libs.spring.starter.validation
15+
api libs.swagger.integration.jakarta
16+
api libs.jackson.databind.nullable
17+
api libs.annotation.api
18+
compileOnly libs.lombok
19+
annotationProcessor libs.lombok
20+
}
21+
22+
tasks.register('generateUiClient', GenerateTask) {
23+
generatorName = "java"
24+
inputSpec = specDir.file("kafbat-ui-api.yaml").asFile.absolutePath
25+
outputDir = targetDir.dir("kafbat-ui-client").asFile.absolutePath
26+
apiPackage = "io.kafbat.ui.api.api"
27+
invokerPackage = "io.kafbat.ui.api"
28+
modelPackage = "io.kafbat.ui.api.model"
29+
30+
configOptions = [library : 'webclient',
31+
asyncNative : 'true',
32+
useBeanValidation: 'true',
33+
dateLibrary : 'java8',
34+
useJakartaEe : 'true',]
35+
}
36+
37+
tasks.register('generateBackendApi', GenerateTask) {
38+
generatorName = "spring"
39+
inputSpec = specDir.file("kafbat-ui-api.yaml").asFile.absolutePath
40+
outputDir = targetDir.dir("api").asFile.absolutePath
41+
apiPackage = "io.kafbat.ui.api"
42+
invokerPackage = "io.kafbat.ui.api"
43+
modelPackage = "io.kafbat.ui.model"
44+
modelNameSuffix = "DTO"
45+
46+
additionalProperties = [removeEnumValuePrefix: "false"]
47+
48+
configOptions = [reactive : "true",
49+
interfaceOnly : "true",
50+
skipDefaultInterface : "true",
51+
useTags : "true",
52+
useSpringBoot3 : "true",
53+
dateLibrary : "java8",
54+
generateConstructorWithAllArgs : "false",
55+
generatedConstructorWithRequiredArgs: "false",
56+
additionalModelTypeAnnotations : """
57+
@lombok.experimental.SuperBuilder
58+
@lombok.AllArgsConstructor
59+
@lombok.NoArgsConstructor
60+
"""]
61+
}
62+
63+
tasks.register('generateConnectClient', GenerateTask) {
64+
generatorName = "java"
65+
inputSpec = specDir.file("kafka-connect-api.yaml").asFile.absolutePath
66+
outputDir = targetDir.dir("kafka-connect-client").asFile.absolutePath
67+
generateApiTests = false
68+
generateModelTests = false
69+
apiPackage = "io.kafbat.ui.connect.api"
70+
modelPackage = "io.kafbat.ui.connect.model"
71+
invokerPackage = "io.kafbat.ui.connect"
72+
73+
74+
configOptions = [asyncNative : "true",
75+
library : "webclient",
76+
useJakartaEe : "true",
77+
useBeanValidation: "true",
78+
dateLibrary : "java8",]
79+
}
80+
81+
tasks.register('generateSchemaRegistryClient', GenerateTask) {
82+
generatorName = "java"
83+
inputSpec = specDir.file("kafka-sr-api.yaml").asFile.absolutePath
84+
outputDir = targetDir.dir("kafka-sr-client").asFile.absolutePath
85+
generateApiTests = false
86+
generateModelTests = false
87+
apiPackage = "io.kafbat.ui.sr.api"
88+
invokerPackage = "io.kafbat.ui.sr"
89+
modelPackage = "io.kafbat.ui.sr.model"
90+
91+
configOptions = [asyncNative : "true",
92+
library : "webclient",
93+
useJakartaEe : "true",
94+
useBeanValidation: "true",
95+
dateLibrary : "java8",]
96+
}
97+
98+
sourceSets {
99+
main {
100+
java {
101+
srcDir targetDir.dir("api/src/main/java")
102+
srcDir targetDir.dir("kafka-connect-client/src/main/java")
103+
srcDir targetDir.dir("kafbat-ui-client/src/main/java")
104+
srcDir targetDir.dir("kafka-sr-client/src/main/java")
105+
}
106+
107+
resources {
108+
srcDir specDir
109+
}
110+
}
111+
}
112+
113+
compileJava.dependsOn generateUiClient, generateBackendApi, generateConnectClient, generateSchemaRegistryClient
114+
processResources.dependsOn generateUiClient, generateBackendApi, generateConnectClient, generateSchemaRegistryClient
115+
116+

e2e-tests/build.gradle

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
plugins {
2+
id 'java'
3+
id 'checkstyle'
4+
id 'io.qameta.allure' version '2.10.0'
5+
}
6+
7+
ext {
8+
kafkaVersion = "3.8.0"
9+
aspectjVersion = "1.9.21"
10+
allureVersion = "2.27.0"
11+
}
12+
13+
dependencies {
14+
implementation project(":contract")
15+
implementation "org.apache.kafka:kafka_2.13:${kafkaVersion}"
16+
implementation "org.aspectj:aspectjweaver:${aspectjVersion}"
17+
implementation "commons-io:commons-io:2.16.1"
18+
implementation "org.testng:testng:7.10.0"
19+
implementation "com.codeborne:selenide:7.2.3"
20+
implementation "io.qameta.allure:allure-testng:${allureVersion}"
21+
implementation "io.qameta.allure:allure-selenide:${allureVersion}"
22+
implementation "io.github.bonigarcia:webdrivermanager:5.8.0"
23+
implementation libs.spring.starter.webflux
24+
implementation "io.netty:netty-resolver-dns-native-macos:4.1.116.Final"
25+
26+
implementation libs.lombok
27+
28+
annotationProcessor libs.lombok
29+
testAnnotationProcessor libs.lombok
30+
}
31+
32+
checkstyle {
33+
toolVersion '10.3.1'
34+
configFile = rootProject.file('etc/checkstyle/checkstyle.xml')
35+
ignoreFailures = false
36+
maxWarnings = 10
37+
maxErrors = 0
38+
}
39+
40+
41+
test {
42+
useTestNG()
43+
}
44+
45+
tasks.named('test') {
46+
enabled = prod
47+
}
48+

0 commit comments

Comments
 (0)