forked from Minestom/Minestom
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.gradle.kts
More file actions
118 lines (100 loc) · 3.58 KB
/
build.gradle.kts
File metadata and controls
118 lines (100 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
plugins {
id("minestom.java-library")
id("minestom.publishing")
alias(libs.plugins.blossom)
alias(libs.plugins.nmcp.aggregation)
}
sourceSets {
main {
java {
srcDir(file("src/main/java"))
srcDir(file("src/autogenerated/java"))
}
blossom {
javaSources {
property("COMMIT", System.getenv("GITHUB_SHA") ?: "LOCAL")
property("BRANCH", System.getenv("GITHUB_REF") ?: "LOCAL")
property("GROUP", project.group.toString())
property("ARTIFACT", project.name)
property("VERSION", project.version.toString())
}
}
}
}
tasks.register<Task>("determineMinecraftVersion") {
outputs.upToDateWhen { false } // Never cache
doLast {
val minestomDataVersion = libs.minestomData.get().version
if (minestomDataVersion == null || "-" !in minestomDataVersion)
throw IllegalStateException("Unable to determine Minecraft version from minestomData dependency")
println(minestomDataVersion.split("-")[0])
}
}
dependencies {
// Core dependencies
api(libs.bundles.adventure)
implementation(libs.slf4j)
implementation(libs.minestomData)
// Performance/data structures
implementation(libs.fastutil)
implementation(libs.bundles.flare)
api(libs.gson)
implementation(libs.jcTools)
testImplementation(project(":testing"))
}
tasks.withType<JavaCompile> {
options.compilerArgs.add("-Xlint:-requires-transitive-automatic") // Adventure dependencies are automatic until 5.0.0, see https://github.com/KyoriPowered/adventure/issues/1287
}
// GraalVM Native Image configuration
tasks.register<Test>("testWithAgent") {
group = "verification"
description = "Runs all tests with GraalVM native-image agent to generate metadata."
val metadataOutputDir = layout.buildDirectory.dir("native-image-metadata").get().asFile
val resourcesTargetDir = layout.projectDirectory.dir("src/main/resources/META-INF/native-image/net.minestom/minestom").asFile
val filterFile = layout.buildDirectory.file("agent-filter.json").get().asFile
testClassesDirs = sourceSets["test"].output.classesDirs
classpath = sourceSets["test"].runtimeClasspath
// Configure the native-image agent
jvmArgs(
"-agentlib:native-image-agent=config-output-dir=${metadataOutputDir.absolutePath},access-filter-file=${filterFile.absolutePath},caller-filter-file=${filterFile.absolutePath}"
)
doFirst {
delete(metadataOutputDir)
metadataOutputDir.mkdirs()
filterFile.parentFile.mkdirs()
filterFile.writeText("""
{
"rules": [
{"excludeClasses": "org.junit.**"},
{"excludeClasses": "org.opentest4j.**"},
{"excludeClasses": "org.gradle.**"},
{"excludeClasses": "org.graalvm.**"},
{"excludeClasses": "net.minestom.testing.**"}
],
"regexRules": [
{"excludeClasses": "net\\.minestom\\.server\\..*Test(\\$.*)?"}
]
}""")
println("Created filter file: ${filterFile.absolutePath}")
}
doLast {
resourcesTargetDir.mkdirs()
copy {
from(metadataOutputDir)
into(resourcesTargetDir)
}
println("✅ GraalVM metadata generated and copied to: $resourcesTargetDir")
}
}
// Publishing configuration below
nmcpAggregation {
centralPortal {
username = System.getenv("SONATYPE_USERNAME")
password = System.getenv("SONATYPE_PASSWORD")
publishingType = "AUTOMATIC"
}
}
dependencies {
nmcpAggregation(rootProject)
nmcpAggregation(project(":testing"))
}