various fixes

This commit is contained in:
2021-09-25 21:31:33 +02:00
parent da358d3522
commit 87d040d125
18 changed files with 126 additions and 93 deletions

View File

@@ -8,12 +8,12 @@ version = "0.1"
gradlePlugin {
plugins {
create("MultiVersionJarPlugin") {
id = "net.woggioni.plugins.multi-version-jar"
implementationClass = "net.woggioni.plugins.multi.release.jar.MultiVersionJarPlugin"
id = "net.woggioni.gradle.multi-version-jar"
implementationClass = "net.woggioni.gradle.multi.release.jar.MultiVersionJarPlugin"
}
create("MultiReleaseJarPlugin") {
id = "net.woggioni.plugins.multi-release-jar"
implementationClass = "net.woggioni.plugins.multi.release.jar.MultiReleaseJarPlugin"
id = "net.woggioni.gradle.multi-release-jar"
implementationClass = "net.woggioni.gradle.multi.release.jar.MultiReleaseJarPlugin"
}
}
}

View File

@@ -1,5 +1,6 @@
package net.woggioni.plugins.multi.release.jar
package net.woggioni.gradle.multi.release.jar
import org.gradle.api.GradleException
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -7,6 +8,7 @@ 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.internal.plugins.DslObject
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.SourceSet
@@ -23,12 +25,13 @@ class MultiReleaseJarPlugin implements Plugin<Project> {
it.languageVersion.get()
} ?: JavaVersion.current()
if(binaryVersion > JavaVersion.VERSION_1_8) {
Configuration compileClasspathConfiguration = project.configurations.compileClasspath
SourceSet mainSourceSet = (project.sourceSets.main as SourceSet)
JavaCompile compileJavaTask = project.tasks.named("compileJava", JavaCompile).get()
JavaCompile compileJavaTask = project.tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile).get()
compileJavaTask.configure {
options.release.set(JavaVersion.VERSION_1_8.majorVersion.toInteger())
}
Jar jarTask = project.tasks.named("jar", Jar).get()
Jar jarTask = project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar).get()
jarTask.configure {
manifest.attributes('Multi-Release': 'true')
}
@@ -42,30 +45,42 @@ class MultiReleaseJarPlugin implements Plugin<Project> {
SourceDirectorySet sourceDirectorySet =
project.objects.sourceDirectorySet("java${javaVersion.majorVersion}", javaVersion.toString())
sourceDirectorySet.with {
srcDir(new File(project.projectDir, "src/main/${sourceDirectorySet.name}"))
srcDir(new File(project.projectDir, "src/${mainSourceSet.name}/${sourceDirectorySet.name}"))
destinationDirectory.set(new File(project.buildDir, "classes/${sourceDirectorySet.name}"))
sourcePaths << sourceDirectories
}
TaskProvider<JavaCompile> 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 {
options.compilerArgs << "--module-path" << mainSourceSet.compileClasspath.asPath
new DslObject(mainSourceSet).getConvention().getPlugins().put(sourceDirectorySet.name, sourceDirectorySet)
mainSourceSet.getExtensions().add(SourceDirectorySet.class, sourceDirectorySet.name, sourceDirectorySet)
TaskProvider<JavaCompile> compileTask = project.tasks.register(JavaPlugin.COMPILE_JAVA_TASK_NAME + javaVersion.majorVersion, JavaCompile, { javaCompileTask ->
javaCompileTask.options.release.set(javaVersion.majorVersion.toInteger())
javaCompileTask.classpath = compileClasspathConfiguration + compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
javaCompileTask.doFirst {
if(project.hasProperty("jpms.module.name")) {
javaCompileTask.options.compilerArgs << "--patch-module" <<
"${project.property("jpms.module.name")}=${mainSourceSet.output.asPath}"
} else {
throw new GradleException("Missing property 'jpms.module.name'")
}
}
source = sourceDirectorySet
destinationDirectory.set(sourceDirectorySet.destinationDirectory)
options.annotationProcessorPath = mainSourceSet.annotationProcessorPath
modularity.inferModulePath = false
options.sourcepath = sourcePaths.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
javaCompileTask.source = sourceDirectorySet
javaCompileTask.destinationDirectory.set(sourceDirectorySet.destinationDirectory)
javaCompileTask.options.annotationProcessorPath = mainSourceSet.annotationProcessorPath
javaCompileTask.modularity.inferModulePath = javaPluginExtension.modularity.inferModulePath
javaCompileTask.options.sourcepath = sourcePaths.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
})
compileOutputs << compileJavaTask.outputs.files
compileOutputs << compileTask.get().outputs.files
sourceDirectorySet.compiledBy(compileTask, { it.getDestinationDirectory()})
jarTask.configure {
from(compileTask.get().outputs.files) {
from(compileTask.get().destinationDirectory) {
into("META-INF/versions/${javaVersion.majorVersion}")
}
}
}
SourceSet testSourceSet = (project.sourceSets.test as SourceSet)
testSourceSet.compileClasspath += compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
testSourceSet.runtimeClasspath += compileOutputs.stream().reduce { fc1, fc2 -> fc1 + fc2 }.get()
["apiElements", "runtimeElements"].forEach { String name ->
Configuration conf = project.configurations.getByName(name)
conf.attributes {

View File

@@ -1,4 +1,4 @@
package net.woggioni.plugins.multi.release.jar
package net.woggioni.gradle.multi.release.jar
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin