plugins { id 'base' id 'net.neoforged.gradle.userdev' version '7.1.39' apply false } subprojects { mod -> apply plugin: 'java-library' apply plugin: 'checkstyle' apply plugin: 'net.neoforged.gradle.userdev' group = 'dev.quorate' java { toolchain.languageVersion = JavaLanguageVersion.of(25) withSourcesJar() } repositories { mavenCentral() } configurations { javafmt } dependencies { implementation 'net.neoforged:neoforge:21.1.250' testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4' javafmt('com.google.googlejavaformat:google-java-format:1.37.0:all-deps') { transitive = false } } checkstyle { toolVersion = '14.3.0' configFile = rootProject.file('quality.xml') } def javaSources = fileTree('src') { include '**/*.java' } ['format': ['--replace'], 'formatCheck': ['--dry-run', '--set-exit-if-changed']].each { name, mode -> tasks.register(name, JavaExec) { inputs.files(javaSources).skipWhenEmpty() javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(25) } classpath = configurations.javafmt mainClass = 'com.google.googlejavaformat.java.Main' jvmArgs = ['api', 'code', 'file', 'parser', 'tree', 'util'].collect { "--add-exports=jdk.compiler/com.sun.tools.javac.${it}=ALL-UNNAMED" } doFirst { args = ['--aosp'] + mode + javaSources.files.sort().collect { it.path } } } } tasks.named('formatCheck') { mustRunAfter 'format' } tasks.withType(Checkstyle).configureEach { mustRunAfter 'format' } tasks.register('quality') { dependsOn 'formatCheck', 'checkstyleMain', 'checkstyleTest' } tasks.named('check') { dependsOn 'quality' } tasks.named('test') { dependsOn 'quality' useJUnitPlatform() maxHeapSize = '512m' jvmArgs '-XX:+UseZGC' } tasks.named('processResources') { inputs.property 'version', provider { mod.version.toString() } filesMatching('META-INF/neoforge.mods.toml') { expand version: mod.version.toString() } } tasks.withType(JavaCompile).matching { it.name in ['compileJava', 'compileTestJava', 'compileProbeJava'] }.configureEach { options.encoding = 'UTF-8' options.compilerArgs += ['-Xlint:all', '-Werror', '-proc:none'] mustRunAfter 'format' } tasks.withType(Jar).configureEach { preserveFileTimestamps = false reproducibleFileOrder = true from(['LICENSE.md', 'COPYING', 'COPYING.LESSER', 'NOTICE.md'].collect { rootProject.file(it) }) { into 'META-INF' } } } ['format', 'formatCheck', 'quality'].each { name -> tasks.register(name) { dependsOn subprojects.collect { it.tasks.named(name) } } } ['assemble', 'check'].each { name -> tasks.named(name) { dependsOn subprojects.collect { it.tasks.named(name) } } }