1+ import xyz.wagyourtail.jvmdg.gradle.task.DowngradeJar
2+
3+ plugins {
4+ id(" java" )
5+ id(" xyz.wagyourtail.jvmdowngrader" ) version " 1.3.4" apply false
6+ }
7+
8+ val downgradedVersions = mapOf (
9+ " bukkit" to setOf (8 , 11 , 16 ),
10+ " bungeecord" to setOf (8 , 11 , 16 ),
11+ " core" to setOf (8 , 11 , 16 ),
12+ " velocity" to setOf (17 )
13+ )
14+ val javaVersion = 21
15+
116subprojects {
217 apply (plugin = " java" )
318 apply (plugin = " java-library" )
419 apply (plugin = " maven-publish" )
520
21+ if (downgradedVersions.containsKey(project.name)) {
22+ apply (plugin = " xyz.wagyourtail.jvmdowngrader" )
23+ }
24+
625 group = " dev.faststats.metrics"
726
827 repositories {
928 mavenCentral()
1029 }
1130
1231 extensions.configure<JavaPluginExtension > {
13- toolchain.languageVersion = JavaLanguageVersion .of(21 )
32+ toolchain.languageVersion = JavaLanguageVersion .of(javaVersion )
1433 withSourcesJar()
1534 withJavadocJar()
1635 }
1736
18- tasks.named< JavaCompile >( " compileJava" ) {
19- options.release.set(21 )
37+ tasks.compileJava {
38+ options.release.set(javaVersion )
2039 }
2140
22- tasks.named< Test >( " test" ) {
23- dependsOn(tasks.named( " javadoc" ) )
41+ tasks.test {
42+ dependsOn(tasks.javadoc)
2443 useJUnitPlatform()
2544 testLogging {
2645 events(" passed" , " skipped" , " failed" )
@@ -47,19 +66,65 @@ subprojects {
4766 }
4867 }
4968
50- tasks.named< Javadoc >( " javadoc" ) {
69+ tasks.javadoc {
5170 val options = options as StandardJavadocDocletOptions
5271 options.tags(" apiNote:a:API Note:" , " implSpec:a:Implementation Requirements:" )
5372 project.findProperty(" moduleName" )?.let { moduleName ->
5473 options.addStringOption(" -add-reads" , " $moduleName =ALL-UNNAMED" )
5574 }
5675 }
5776
77+ tasks.build {
78+ if (! downgradedVersions.containsKey(project.name)) return @build
79+ dependsOn(tasks.named(" shadeDowngradedApi" ))
80+ }
81+
82+ downgradedVersions[project.name]?.forEach { javaVersion ->
83+ // Create downgradeJar task
84+ tasks.register<DowngradeJar >(" downgradeJar$javaVersion " ) {
85+ group = " jvmdowngrader"
86+ description = " Downgrade JAR to Java $javaVersion compatibility"
87+
88+ dependsOn(tasks.jar)
89+
90+ inputFile.set(tasks.jar.flatMap { it.archiveFile })
91+ downgradeTo.set(JavaVersion .toVersion(javaVersion))
92+ classpath = (sourceSets[" main" ].compileClasspath)
93+ archiveClassifier.set(" java-$javaVersion " )
94+ }
95+
96+ // Create downgradeSources task
97+ tasks.register<DowngradeJar >(" downgradeSources$javaVersion " ) {
98+ group = " jvmdowngrader"
99+ description = " Downgrade sources JAR to Java $javaVersion compatibility"
100+
101+ dependsOn(tasks.named(" sourcesJar" ))
102+
103+ inputFile.set(tasks.named<Jar >(" sourcesJar" ).flatMap { it.archiveFile })
104+ downgradeTo.set(JavaVersion .toVersion(javaVersion))
105+ classpath = (sourceSets[" main" ].compileClasspath)
106+ archiveClassifier.set(" java-$javaVersion -sources" )
107+ }
108+
109+ // Create downgradeJavadoc task
110+ tasks.register<DowngradeJar >(" downgradeJavadoc$javaVersion " ) {
111+ group = " jvmdowngrader"
112+ description = " Downgrade javadoc JAR to Java $javaVersion compatibility"
113+
114+ dependsOn(tasks.named(" javadocJar" ))
115+
116+ inputFile.set(tasks.named<Jar >(" javadocJar" ).flatMap { it.archiveFile })
117+ downgradeTo.set(JavaVersion .toVersion(javaVersion))
118+ classpath = (sourceSets[" main" ].compileClasspath)
119+ archiveClassifier.set(" java-$javaVersion -javadoc" )
120+ }
121+ }
122+
58123 afterEvaluate {
59124 extensions.configure<PublishingExtension > {
60125 publications.create<MavenPublication >(" maven" ) {
61126 artifactId = project.name
62- groupId = " dev.faststats.metrics"
127+ groupId = " dev.faststats.metrics.java- $javaVersion "
63128
64129 pom {
65130 url.set(" https://faststats.dev/docs" )
@@ -74,6 +139,42 @@ subprojects {
74139 from(components[" java" ])
75140 }
76141
142+ // Create publications for downgraded versions
143+ downgradedVersions[project.name]?.forEach { javaVersion ->
144+ publications.create<MavenPublication >(" mavenJava${javaVersion} " ) {
145+ artifactId = project.name
146+ groupId = " dev.faststats.metrics.java-$javaVersion "
147+
148+ pom {
149+ url.set(" https://faststats.dev/docs" )
150+ scm {
151+ val repository = " faststats-dev/dev-kits"
152+ url.set(" https://github.com/$repository " )
153+ connection.set(" scm:git:git://github.com/$repository .git" )
154+ developerConnection.set(" scm:git:ssh://github.com/$repository .git" )
155+ }
156+ description.set(" Downgraded to Java $javaVersion compatibility" )
157+ }
158+
159+ // Add downgraded jar
160+ artifact(tasks.named(" downgradeJar$javaVersion " ))
161+
162+ // Add downgraded sources if available
163+ tasks.findByName(" downgradeSources$javaVersion " )?.let { sourcesTask ->
164+ artifact(sourcesTask) {
165+ classifier = " sources"
166+ }
167+ }
168+
169+ // Add downgraded javadoc if available
170+ tasks.findByName(" downgradeJavadoc$javaVersion " )?.let { javadocTask ->
171+ artifact(javadocTask) {
172+ classifier = " javadoc"
173+ }
174+ }
175+ }
176+ }
177+
77178 repositories {
78179 maven {
79180 val channel = if ((version as String ).contains(" -pre" )) " snapshots" else " releases"
0 commit comments