plugins { id 'java-library' id 'maven-publish' id 'eclipse' id 'signing' } group = 'org.stianloader' def archivesBaseName = 'micromixin-backports' version = '0.8.0' repositories { mavenCentral() mavenLocal() maven { name 'stianloader' url 'https://stianloader.org/maven' } } dependencies { compileOnly "org.stianloader:sponge-mixin:0.16.4-0.8.7-1-a20250906" // Dependency required by mixin, but the dependency is not transitively provided. // We need it however. implementation 'org.ow2.asm:asm-util:9.8' implementation 'org.ow2.asm:asm-commons:9.8' compileOnly 'org.jetbrains:annotations-java5:24.1.0' } sourceSets { java9 { java { compileClasspath += main.compileClasspath compileClasspath += main.output java.setSrcDirs(new java.util.ArrayList()) java.srcDir(getProjectDir().toPath().resolve('src/main/java9')) java.filter.exclude("module-info.java") // !!! More compilation hacks !!! java.filter.exclude("") } } java9module { java { compileClasspath += main.compileClasspath java.setSrcDirs(new java.util.ArrayList()) var rootSourceDir = getProjectDir().toPath().resolve('src/main/java9'); java.srcDir(rootSourceDir) java.srcDirs(main.allJava.srcDirs()) main.allJava.srcDirs().each { dir -> { // For whatever reason 'dir' represents source files and not source directories at this point // Can I complain? No, not really... String path = dir.toString().substring(dir.toString().indexOf("java/") + 5) if (java.nio.file.Files.exists(rootSourceDir.resolve(path))) { java.filter.exclude(path) } } } java.filter.include("module-info.java") } } } java { toolchain { languageVersion = JavaLanguageVersion.of(8) } toolchain { languageVersion = JavaLanguageVersion.of(11) } } compileJava { javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(8) } modularity.inferModulePath.set(true) doFirst { // This is needed as Mixin is compiled with J8 (but could in theory be J6 compatible) sourceCompatibility = '1.6' targetCompatibility = '1.6' } } compileJava9Java { javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(11) } dependsOn compileJava sourceCompatibility = '9' targetCompatibility = '9' modularity.inferModulePath.set(false) } compileJava9moduleJava { javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(11) } dependsOn compileJava sourceCompatibility = '9' targetCompatibility = '9' modularity.inferModulePath.set(true) } jar { dependsOn compileJava9Java dependsOn compileJava9moduleJava into('META-INF/versions/9') { from sourceSets.java9.output } into('META-INF/versions/9') { from sourceSets.java9module.output include 'module-info.class' } into('META-INF/LICENSES/' + archivesBaseName) { from project.rootProject.file("LICENSE") } manifest { attributes 'Multi-Release': true } } task sourcesJar(type: Jar, dependsOn: classes) { archiveClassifier = 'sources' from sourceSets.main.allSource into('META-INF/versions/9') { from sourceSets.java9.allSource } into('META-INF/LICENSES/' + archivesBaseName) { from project.rootProject.file("LICENSE") } } task javadocJar(type: Jar, dependsOn: javadoc) { archiveClassifier = 'javadoc' from javadoc.destinationDir } publishing { publications { maven(MavenPublication) { groupId project.group artifactId project.archivesBaseName from components['java'] artifact sourcesJar artifact javadocJar pom { name = 'Micromixin Backports' description = 'Backports Micromixin-specific annotations to standard mixin environments.' url = 'https://github.com/stianloader/Micromixin' inceptionYear = '2024' licenses { license { name = 'BSD-2-Clause' url = 'https://opensource.org/license/bsd-2-clause/' distribution = 'repo' } } developers { developer { id = 'geolykt' name = 'Emeric "Geolykt" Werner' email = 'mail@geolykt.de' timezone = 'Europe/Berlin' url = 'https://geolykt.de/' } } scm { connection = 'scm:git:git://github.com/stianloader/Micromixin.git' developerConnection = 'scm:git:ssh://github.com:stianloader/Micromixin.git' url = 'https://github.com/stianloader/Micromixin/tree/main' } issueManagement { system = 'Github' url = 'https://github.com/stianloader/Micromixin/issues' } } } } repositories { if (providers.gradleProperty('publishRepo').isPresent()) { maven { url providers.gradleProperty('publishRepo').get() allowInsecureProtocol = true } } else { mavenLocal() } } } if (providers.gradleProperty('signedPublish').isPresent() && Boolean.parseBoolean(providers.gradleProperty('signedPublish').get())) { signing { useGpgCmd() sign publishing.publications.maven } } eclipse { jdt { sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 } classpath { containers 'org.eclipse.buildship.core.gradleclasspathcontainer' containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6/' file { whenMerged { entries.removeAll { if (it.kind == 'con' || it.kind == 'lib') { if (it.path.endsWith("/JavaSE-11/")) { return true } it.entryAttributes['module'] = 'false' } else if (it.kind == 'src' && it.path == 'src/main/java9') { // Eclipse has a seizure it.setIncludes(java.util.Arrays.asList('module-info.java')) } return false } } } } }