import org.apache.tools.ant.filters.ReplaceTokens plugins { id 'com.gradleup.shadow' version '9.2.2' id 'org.cadixdev.licenser' version '0.6.1' apply false id 'dev.architectury.loom' version '1.9-SNAPSHOT' apply false id 'gg.essential.multi-version.root' apply false id 'org.ajoberstar.grgit' version '5.3.2' id 'maven-publish' id 'java' } group 'net.william278' version "$ext.plugin_version${versionMetadata()}" description "$ext.plugin_description" defaultTasks 'licenseFormat', 'build' ext { set 'version', version.toString() set 'description', description.toString() set 'jedis_version', jedis_version.toString() set 'mysql_driver_version', mysql_driver_version.toString() set 'mariadb_driver_version', mariadb_driver_version.toString() set 'postgres_driver_version', postgres_driver_version.toString() set 'mongodb_driver_version', mongodb_driver_version.toString() set 'snappy_version', snappy_version.toString() } publishing { repositories { if (System.getenv("RELEASES_MAVEN_USERNAME") != null) { maven { name = "william278-releases" url = "https://repo.william278.net/releases" credentials { username = System.getenv("RELEASES_MAVEN_USERNAME") password = System.getenv("RELEASES_MAVEN_PASSWORD") } authentication { basic(BasicAuthentication) } } } if (System.getenv("SNAPSHOTS_MAVEN_USERNAME") != null) { maven { name = "william278-snapshots" url = "https://repo.william278.net/snapshots" credentials { username = System.getenv("SNAPSHOTS_MAVEN_USERNAME") password = System.getenv("SNAPSHOTS_MAVEN_PASSWORD") } authentication { basic(BasicAuthentication) } } } } } allprojects { // Ignore parent projects (no jars) if (project.name == 'fabric' || project.name == 'bukkit') { return } apply plugin: 'com.gradleup.shadow' apply plugin: 'org.cadixdev.licenser' apply plugin: 'java' compileJava.options.encoding = 'UTF-8' compileJava.options.release.set 17 javadoc.options.encoding = 'UTF-8' javadoc.options.addStringOption('Xdoclint:none', '-quiet') repositories { mavenLocal() mavenCentral() maven { url 'https://repo.william278.net/releases/' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } maven { url 'https://repo.papermc.io/repository/maven-public/' } maven { url 'https://repo.codemc.io/repository/maven-public/' } maven { url 'https://repo.minebench.de/' } maven { url 'https://repo.alessiodp.com/releases/' } maven { url 'https://jitpack.io' } maven { url 'https://mvn-repo.arim.space/lesser-gpl3/' } maven { url 'https://libraries.minecraft.net/' } } dependencies { testImplementation(platform("org.junit:junit-bom:6.0.1")) testImplementation 'org.junit.jupiter:junit-jupiter' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testCompileOnly 'org.jetbrains:annotations:26.0.2-1' } license { header = rootProject.file('HEADER') include '**/*.java' newLine = true } test { useJUnitPlatform() } processResources { def tokenMap = rootProject.ext.properties tokenMap.merge("grgit", '', (s, s2) -> s) filesMatching(['**/*.json', '**/*.yml']) { filter ReplaceTokens as Class, beginToken: '${', endToken: '}', tokens: tokenMap } } } subprojects { // Ignore parent projects (no jars) if (['fabric', 'bukkit'].contains(project.name)) { return } // Project naming version rootProject.version def name = "$rootProject.name" if (rootProject != project.parent) { name += "-${project.parent.name.capitalize()}" } else { name += "-${project.name.capitalize()}" } archivesBaseName = name // Version-specific configuration if (['fabric', 'bukkit'].contains(project.parent?.name)) { compileJava.options.release.set 21 version += "+mc.${project.name}" if (project.parent?.name?.equals('fabric')) { apply plugin: 'dev.architectury.loom' } } jar { from '../LICENSE' } shadowJar { destinationDirectory.set(file("$rootDir/target")) archiveClassifier.set('') } // API publishing if (project.name == 'common' || ['fabric', 'bukkit'].contains(project.parent?.name)) { java { withSourcesJar() withJavadocJar() } sourcesJar { destinationDirectory.set(file("$rootDir/target")) } javadocJar { destinationDirectory.set(file("$rootDir/target")) } shadowJar.dependsOn(sourcesJar, javadocJar) publishing { if (['common'].contains(project.name)) { publications { mavenJavaCommon(MavenPublication) { groupId = 'net.william278.husksync' artifactId = 'husksync-common' version = "$rootProject.version" artifact shadowJar artifact sourcesJar artifact javadocJar } } } if (project.parent?.name?.equals('bukkit')) { publications { "mavenJavaBukkit_${project.name.replace('.', '_')}"(MavenPublication) { groupId = 'net.william278.husksync' artifactId = 'husksync-bukkit' version = "$rootProject.version+$project.name" artifact shadowJar artifact sourcesJar artifact javadocJar } } } if (project.parent?.name?.equals('fabric')) { publications { "mavenJavaFabric_${project.name.replace('.', '_')}"(MavenPublication) { groupId = 'net.william278.husksync' artifactId = 'husksync-fabric' version = "$rootProject.version+$project.name" artifact remapJar artifact sourcesJar artifact javadocJar } } } } } jar.dependsOn shadowJar clean.delete "$rootDir/target" } logger.lifecycle("Building HuskSync ${version} by William278") @SuppressWarnings('GrMethodMayBeStatic') def versionMetadata() { // Require grgit if (grgit == null) { return '-unknown' } // If unclean, return the last commit hash with -indev if (!grgit.status().clean) { return '-' + grgit.head().abbreviatedId + '-indev' } // Otherwise if this matches a tag, return nothing def tag = grgit.tag.list().find { it.commit.id == grgit.head().id } if (tag != null) { return '' } return '-' + grgit.head().abbreviatedId }