diff --git a/multi-release-jar/build.gradle.kts b/multi-release-jar/build.gradle similarity index 87% rename from multi-release-jar/build.gradle.kts rename to multi-release-jar/build.gradle index 4ec348c..8fc2b0c 100644 --- a/multi-release-jar/build.gradle.kts +++ b/multi-release-jar/build.gradle @@ -1,9 +1,10 @@ plugins { - `maven-publish` - `groovy-gradle-plugin` - id("com.gradle.plugin-publish") + id 'maven-publish' + id 'groovy-gradle-plugin' } +version = "0.1" + gradlePlugin { plugins { create("MultiVersionJarPlugin") { diff --git a/multi-release-jar/src/main/groovy/net/woggioni/plugins/multi/release/jar/MultiReleaseJarPlugin.groovy b/multi-release-jar/src/main/groovy/net/woggioni/plugins/multi/release/jar/MultiReleaseJarPlugin.groovy index cb716f9..0fbc083 100644 --- a/multi-release-jar/src/main/groovy/net/woggioni/plugins/multi/release/jar/MultiReleaseJarPlugin.groovy +++ b/multi-release-jar/src/main/groovy/net/woggioni/plugins/multi/release/jar/MultiReleaseJarPlugin.groovy @@ -7,20 +7,22 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.attributes.java.TargetJvmVersion import org.gradle.api.file.FileCollection import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.plugins.Convention -import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.TaskProvider 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 class MultiReleaseJarPlugin implements Plugin { @Override void apply(Project project) { - project.pluginManager.apply(JavaBasePlugin) - if(JavaVersion.current() > JavaVersion.VERSION_1_8) { + project.pluginManager.apply(JavaPlugin) + 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) JavaCompile compileJavaTask = project.tasks.named("compileJava", JavaCompile).get() compileJavaTask.configure { @@ -35,16 +37,16 @@ class MultiReleaseJarPlugin implements Plugin { ArrayList sourcePaths = new ArrayList<>() sourcePaths << mainSourceSet.java.sourceDirectories Arrays.stream(JavaVersion.values()).filter { - it > JavaVersion.VERSION_1_8 && it <= JavaVersion.current() + it > JavaVersion.VERSION_1_8 && it <= binaryVersion }.forEach {javaVersion -> SourceDirectorySet sourceDirectorySet = - project.objects.sourceDirectorySet("java${javaVersion.majorVersion}", javaVersion.toString()) + project.objects.sourceDirectorySet("java${javaVersion.majorVersion}", javaVersion.toString()) sourceDirectorySet.with { srcDir(new File(project.projectDir, "src/main/${sourceDirectorySet.name}")) destinationDirectory.set(new File(project.buildDir, "classes/${sourceDirectorySet.name}")) sourcePaths << sourceDirectories } - TaskProvider compileTask = project.tasks.register("compileJava${javaVersion.majorVersion}", JavaCompile, { + TaskProvider compileTask = project.tasks.register(JavaPlugin.COMPILE_JAVA_TASK_NAME + javaVersion.majorVersion, JavaCompile, { options.release.set(javaVersion.majorVersion.toInteger()) classpath = compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get() it.doFirst { @@ -58,13 +60,13 @@ class MultiReleaseJarPlugin implements Plugin { }) compileOutputs << compileJavaTask.outputs.files sourceDirectorySet.compiledBy(compileTask, { it.getDestinationDirectory()}) - jarTask.configure { Jar it -> + jarTask.configure { from(compileTask.get().outputs.files) { into("META-INF/versions/${javaVersion.majorVersion}") } } } - ["apiElements", "runtimeElements"].forEach {String name -> + ["apiElements", "runtimeElements"].forEach { String name -> Configuration conf = project.configurations.getByName(name) conf.attributes { attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, compileJavaTask.options.release.get())