updated multi reelase jar pluigin

This commit is contained in:
2021-07-26 22:11:23 +02:00
parent 93981eb796
commit fdf183c210
2 changed files with 17 additions and 14 deletions

View File

@@ -1,9 +1,10 @@
plugins { plugins {
`maven-publish` id 'maven-publish'
`groovy-gradle-plugin` id 'groovy-gradle-plugin'
id("com.gradle.plugin-publish")
} }
version = "0.1"
gradlePlugin { gradlePlugin {
plugins { plugins {
create("MultiVersionJarPlugin") { create("MultiVersionJarPlugin") {

View File

@@ -7,20 +7,22 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.java.TargetJvmVersion import org.gradle.api.attributes.java.TargetJvmVersion
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.plugins.Convention import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.internal.impldep.org.apache.commons.compress.compressors.z.ZCompressorInputStream
import org.gradle.jvm.tasks.Jar import org.gradle.jvm.tasks.Jar
class MultiReleaseJarPlugin implements Plugin<Project> { class MultiReleaseJarPlugin implements Plugin<Project> {
@Override @Override
void apply(Project project) { void apply(Project project) {
project.pluginManager.apply(JavaBasePlugin) project.pluginManager.apply(JavaPlugin)
if(JavaVersion.current() > JavaVersion.VERSION_1_8) { JavaPluginExtension javaPluginExtension = project.extensions.findByType(JavaPluginExtension.class)
JavaVersion binaryVersion = javaPluginExtension.targetCompatibility ?: javaPluginExtension.toolchain?.with {
it.languageVersion.get()
} ?: JavaVersion.current()
if(binaryVersion > JavaVersion.VERSION_1_8) {
SourceSet mainSourceSet = (project.sourceSets.main as SourceSet) SourceSet mainSourceSet = (project.sourceSets.main as SourceSet)
JavaCompile compileJavaTask = project.tasks.named("compileJava", JavaCompile).get() JavaCompile compileJavaTask = project.tasks.named("compileJava", JavaCompile).get()
compileJavaTask.configure { compileJavaTask.configure {
@@ -35,7 +37,7 @@ class MultiReleaseJarPlugin implements Plugin<Project> {
ArrayList<FileCollection> sourcePaths = new ArrayList<>() ArrayList<FileCollection> sourcePaths = new ArrayList<>()
sourcePaths << mainSourceSet.java.sourceDirectories sourcePaths << mainSourceSet.java.sourceDirectories
Arrays.stream(JavaVersion.values()).filter { Arrays.stream(JavaVersion.values()).filter {
it > JavaVersion.VERSION_1_8 && it <= JavaVersion.current() it > JavaVersion.VERSION_1_8 && it <= binaryVersion
}.forEach {javaVersion -> }.forEach {javaVersion ->
SourceDirectorySet sourceDirectorySet = SourceDirectorySet sourceDirectorySet =
project.objects.sourceDirectorySet("java${javaVersion.majorVersion}", javaVersion.toString()) project.objects.sourceDirectorySet("java${javaVersion.majorVersion}", javaVersion.toString())
@@ -44,7 +46,7 @@ class MultiReleaseJarPlugin implements Plugin<Project> {
destinationDirectory.set(new File(project.buildDir, "classes/${sourceDirectorySet.name}")) destinationDirectory.set(new File(project.buildDir, "classes/${sourceDirectorySet.name}"))
sourcePaths << sourceDirectories sourcePaths << sourceDirectories
} }
TaskProvider<JavaCompile> compileTask = project.tasks.register("compileJava${javaVersion.majorVersion}", JavaCompile, { TaskProvider<JavaCompile> compileTask = project.tasks.register(JavaPlugin.COMPILE_JAVA_TASK_NAME + javaVersion.majorVersion, JavaCompile, {
options.release.set(javaVersion.majorVersion.toInteger()) options.release.set(javaVersion.majorVersion.toInteger())
classpath = compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get() classpath = compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
it.doFirst { it.doFirst {
@@ -58,7 +60,7 @@ class MultiReleaseJarPlugin implements Plugin<Project> {
}) })
compileOutputs << compileJavaTask.outputs.files compileOutputs << compileJavaTask.outputs.files
sourceDirectorySet.compiledBy(compileTask, { it.getDestinationDirectory()}) sourceDirectorySet.compiledBy(compileTask, { it.getDestinationDirectory()})
jarTask.configure { Jar it -> jarTask.configure {
from(compileTask.get().outputs.files) { from(compileTask.get().outputs.files) {
into("META-INF/versions/${javaVersion.majorVersion}") into("META-INF/versions/${javaVersion.majorVersion}")
} }