import org.apache.tools.ant.filters.ReplaceTokens import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id 'java-library' id 'maven-publish' id 'com.gradleup.shadow' version '8.3.5' id "org.jetbrains.kotlin.jvm" version "2.0.21" } version = System.getenv('GITHUB_VERSION') ?: 'local' group = 'org.mvplugins.multiverse.core' description = 'Multiverse-Core' compileJava { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } compileTestJava { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 } compileTestKotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) javaParameters.set(true) } } repositories { mavenLocal() mavenCentral() maven { url = uri('https://hub.spigotmc.org/nexus/content/repositories/snapshots/') } maven { url = uri('https://repo.onarandombox.com/content/groups/public') } maven { url = uri('https://hub.spigotmc.org/nexus/content/groups/public/') } maven { url = uri('https://jitpack.io') } maven { url = uri('https://repo.minebench.de/') } maven { url = uri('https://repo.maven.apache.org/maven2/') } maven { name = 'aikar repo' url = uri('https://repo.aikar.co/content/groups/aikar/') } maven { name = 'glaremasters repo' url = 'https://repo.glaremasters.me/repository/towny/' } maven { name = "helpchatRepoReleases" url = uri("https://repo.helpch.at/releases/") } maven { name = 'papermc repo' url = 'https://repo.papermc.io/repository/maven-public/' } } configurations { // Add configuration for server API compileOnly.extendsFrom serverApi runtimeClasspath.extendsFrom serverApi // Add configuration for external plugins implementation.extendsFrom externalPlugin // Add configuration for dependencies that will be included in fat jar compileClasspath.extendsFrom shadowed testCompileClasspath.extendsFrom shadowed testRuntimeClasspath.extendsFrom shadowed oldTestCompileClasspath.extendsFrom shadowed oldTestRuntimeClasspath.extendsFrom shadowed // Add configuration for old tests oldTestImplementation.extendsFrom implementation oldTestRuntime.extendsFrom runtime } dependencies { serverApi 'org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT' // Economy externalPlugin('com.github.MilkBowl:VaultAPI:1.7.1') { exclude group: 'org.bukkit', module: 'bukkit' } // PlaceholderAPI externalPlugin 'me.clip:placeholderapi:2.11.6' // Command Framework shadowed 'co.aikar:acf-paper:0.5.1-SNAPSHOT' // Config shadowed('io.github.townyadvanced.commentedconfiguration:CommentedConfiguration:1.0.1') { exclude group: 'org.spigotmc', module: 'spigot-api' } // Utils shadowed 'io.vavr:vavr:0.10.4' shadowed 'org.glassfish.hk2:hk2-locator:3.0.3' shadowed('org.glassfish.hk2:hk2-inhabitant-generator:3.0.3') { exclude group: 'org.apache.maven', module: 'maven-core' } shadowed('com.dumptruckman.minecraft:Logging:1.1.1') { exclude group: 'junit', module: 'junit' } shadowed 'de.themoep.idconverter:mappings:1.2-SNAPSHOT' shadowed('org.bstats:bstats-bukkit:3.1.0') { exclude group: 'org.bukkit', module: 'bukkit' } shadowed 'net.minidev:json-smart:2.4.9' shadowed 'org.jetbrains:annotations:22.0.0' shadowed 'io.papermc:paperlib:1.0.8' // Tests testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21' testImplementation 'org.mockbukkit.mockbukkit:mockbukkit-v1.21:4.3.1' testImplementation('com.googlecode.json-simple:json-simple:1.1.1') { exclude group: 'junit', module: 'junit' } testImplementation 'org.jetbrains.kotlin:kotlin-test' testImplementation 'com.natpryce:hamkrest:1.8.0.1' testImplementation 'org.mockito.kotlin:mockito-kotlin:4.1.0' // Old Tests oldTestImplementation 'org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT' oldTestImplementation('com.googlecode.json-simple:json-simple:1.1.1') { exclude group: 'junit', module: 'junit' } oldTestImplementation 'junit:junit:4.13.1' oldTestImplementation 'org.mockito:mockito-core:3.11.2' oldTestImplementation 'commons-io:commons-io:2.7' // Annotation Processors annotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3' testAnnotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3' } java { withSourcesJar() withJavadocJar() } tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } tasks.withType(Javadoc).configureEach { options.encoding = 'UTF-8' } configurations { [apiElements, runtimeElements].each { it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) } it.outgoing.artifact(shadowJar) } } sourceSets { oldTest { java { compileClasspath += main.output runtimeClasspath += main.output srcDir file('src/old-test/java') } resources.srcDir file('src/old-test/resources') } } publishing { publications { maven(MavenPublication) { from components.java pom.withXml { Node pomNode = asNode() // Remove Kotlin dependency pomNode.dependencies.'*'.findAll() { it.groupId.text() == 'org.jetbrains.kotlin' }.each() { it.parent().remove(it) } // Switch runtime deps to provided pomNode.dependencies.'*'.findAll() { it.scope.text() == 'runtime' }.each() { it.scope*.value = 'provided' } // Add spigot api to pom project.configurations.serverApi.allDependencies.each { dependency -> pomNode.dependencies[0].appendNode("dependency").with { it.appendNode("groupId", dependency.group) it.appendNode("artifactId", dependency.name) it.appendNode("version", dependency.version) it.appendNode("scope", "provided") } } } } } repositories { maven { name = "GitHubPackages" url = "https://maven.pkg.github.com/Multiverse/Multiverse-Core" credentials { username = System.getenv("GITHUB_ACTOR") password = System.getenv("GITHUB_TOKEN") } } maven { name = "multiverse" def releasesRepoUrl = "https://repo.dumptruckman.com/multiverse-releases" def snapshotsRepoUrl = "https://repo.dumptruckman.com/multiverse-snapshots" url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl credentials(PasswordCredentials) } } } ext.bitlyAccessToken = System.getenv('BITLY_ACCESS_TOKEN') ?: 'bitly-access-token' task prepareSource(type: Sync) { inputs.property 'bitlyAccessToken', bitlyAccessToken from sourceSets.main.java into "$buildDir/src" filter(ReplaceTokens, tokens: [ 'bitly-access-token': bitlyAccessToken, ]) } compileJava { source = prepareSource.outputs } tasks.withType(JavaCompile) { configure(options) { options.compilerArgs << '-Aorg.glassfish.hk2.metadata.location=META-INF/hk2-locator/Multiverse-Core' } } compileKotlin { // We're not using Kotlin in the plugin itself, just tests! enabled = false } configurations.findAll { !it.name.startsWith('test') }.each { it.exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' } processResources { def props = [version: "${project.version}"] inputs.properties props filteringCharset 'UTF-8' filesMatching('plugin.yml') { expand props } // This task should never be skipped. The tests depend on this having been run but we want the new version number // that is created after tests are run and before we run again to publish. outputs.upToDateWhen { false } } javadoc { source = sourceSets.main.allJava classpath = configurations.compileClasspath } project.configurations.api.canBeResolved = true shadowJar { relocate 'co.aikar', 'org.mvplugins.multiverse.external.acf' relocate 'com.dumptruckman.minecraft.util.Logging', 'org.mvplugins.multiverse.core.utils.CoreLogging' relocate 'com.dumptruckman.minecraft.util.DebugLog', 'org.mvplugins.multiverse.core.utils.DebugFileLogger' relocate 'de.themoep.idconverter', 'org.mvplugins.multiverse.external.idconverter' relocate 'io.github.townyadvanced.commentedconfiguration', 'org.mvplugins.multiverse.external.commentedconfiguration' relocate 'me.main__.util', 'org.mvplugins.multiverse.external.serializationconfig' relocate 'org.bstats', 'org.mvplugins.multiverse.external.bstats' relocate 'com.sun', 'org.mvplugins.multiverse.external.sun' relocate 'net.minidev', 'org.mvplugins.multiverse.external.minidev' relocate 'org.objectweb', 'org.mvplugins.multiverse.external.objectweb' relocate 'io.vavr', 'org.mvplugins.multiverse.external.vavr' relocate 'jakarta', 'org.mvplugins.multiverse.external.jakarta' relocate 'javassist', 'org.mvplugins.multiverse.external.javassist' relocate 'org.aopalliance', 'org.mvplugins.multiverse.external.aopalliance' relocate 'org.glassfish', 'org.mvplugins.multiverse.external.glassfish' relocate 'org.jvnet', 'org.mvplugins.multiverse.external.jvnet' relocate 'org.intellij', 'org.mvplugins.multiverse.external.intellij' relocate 'org.jetbrains', 'org.mvplugins.multiverse.external.jetbrains' relocate 'io.papermc.lib', 'org.mvplugins.multiverse.external.paperlib' configurations = [project.configurations.shadowed] archiveClassifier.set('') dependencies { exclude(dependency { it.moduleGroup == 'org.jetbrains.kotlin' }) } //classifier = '' } build.dependsOn shadowJar jar.enabled = false test { useJUnitPlatform() testLogging { exceptionFormat = 'full' } }