import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { id("com.github.johnrengelman.shadow") } val platforms = setOf( rootProject.projects.viaversionBukkit, rootProject.projects.viaversionBungee, rootProject.projects.viaversionFabric, rootProject.projects.viaversionSponge, rootProject.projects.viaversionVelocity ).map { it.dependencyProject } tasks { shadowJar { archiveClassifier.set("") archiveFileName.set("ViaVersion-${project.version}.jar") destinationDirectory.set(rootProject.projectDir.resolve("build/libs")) duplicatesStrategy = DuplicatesStrategy.EXCLUDE platforms.forEach { platform -> val shadowJarTask = platform.tasks.named("shadowJar").forUseAtConfigurationTime().get() dependsOn(shadowJarTask) dependsOn(platform.tasks.withType()) from(zipTree(shadowJarTask.archiveFile)) } } build { dependsOn(shadowJar) } sourcesJar { rootProject.subprojects.forEach { subproject -> if (subproject == project) return@forEach val platformSourcesJarTask = subproject.tasks.findByName("sourcesJar") as? Jar ?: return@forEach dependsOn(platformSourcesJarTask) from(zipTree(platformSourcesJarTask.archiveFile)) } } } publishShadowJar()