1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2025-12-19 14:59:20 +00:00
Files
Floodgate/build-logic/src/main/kotlin/floodgate.shadow-conventions.gradle.kts
2022-06-08 00:08:39 +02:00

54 lines
1.8 KiB
Plaintext

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
id("floodgate.base-conventions")
id("com.github.johnrengelman.shadow")
}
tasks {
named<Jar>("jar") {
archiveClassifier.set("unshaded")
from(project.rootProject.file("LICENSE"))
}
val shadowJar = named<ShadowJar>("shadowJar") {
archiveBaseName.set("floodgate-${project.name}")
archiveVersion.set("")
archiveClassifier.set("")
val sJar: ShadowJar = this
doFirst {
providedDependencies[project.name]?.forEach { (name, notation) ->
sJar.dependencies {
println("Excluding $name from ${project.name}")
exclude(dependency(notation))
}
}
// relocations made in included project dependencies are for whatever reason not
// forwarded to the project implementing the dependency.
// (e.g. a relocation in `core` will relocate for core. But when you include `core` in
// for example Velocity, the relocation will be gone for Velocity)
addRelocations(project, sJar)
}
}
named("build") {
dependsOn(shadowJar)
}
}
fun addRelocations(project: Project, shadowJar: ShadowJar) {
callAddRelocations(project.configurations.api.get(), shadowJar)
callAddRelocations(project.configurations.implementation.get(), shadowJar)
relocatedPackages[project.name]?.forEach { pattern ->
println("Relocating $pattern for ${shadowJar.project.name}")
shadowJar.relocate(pattern, "org.geysermc.floodgate.shadow.$pattern")
}
}
fun callAddRelocations(configuration: Configuration, shadowJar: ShadowJar) =
configuration.dependencies.forEach {
if (it is ProjectDependency)
addRelocations(it.dependencyProject, shadowJar)
}