plugins { id 'java-library' id 'maven-publish' id 'eclipse' id 'signing' } group = 'org.stianloader' def archivesBaseName = 'micromixin-annotations' version = '0.8.0' repositories { mavenLocal() mavenCentral() } dependencies { 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(6) } toolchain { languageVersion = JavaLanguageVersion.of(11) } } compileJava { javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(6) } sourceCompatibility = '1.6' targetCompatibility = '1.6' modularity.inferModulePath.set(true) } 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 Annotations' description = 'Mixin annotations supported by micromixin-transformer' url = 'https://github.com/stianloader/Micromixin' inceptionYear = '2023' 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 { classpath { containers 'org.eclipse.buildship.core.gradleclasspathcontainer' file { whenMerged { entries.each { if (it.kind == 'con' || it.kind == 'lib') { it.entryAttributes['module'] = 'true' } else if (it.kind == 'src' && it.path == 'src/main/java9') { // Eclipse has a seizure it.setIncludes(java.util.Arrays.asList('module-info.java')) } } } } } }