Switch many common tasks defined in buildSrc to lazy creation

also refactor some locally defined tasks to the creation avoidance API
This commit is contained in:
Ilya Chernikov
2019-08-14 11:35:52 +02:00
parent f74c4fa538
commit 0f41dc814f
29 changed files with 77 additions and 69 deletions
+5 -4
View File
@@ -69,12 +69,12 @@ fun Project.runtimeJarArtifactBy(task: Task, artifactRef: Any, body: Configurabl
}
}
fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
fun <T : Jar> Project.runtimeJar(task: TaskProvider<T>, body: T.() -> Unit = {}): TaskProvider<T> {
extra["runtimeJarTask"] = task
tasks.findByName("jar")?.let { defaultJarTask ->
removeArtifacts(configurations.getOrCreate("archives"), defaultJarTask)
}
return task.apply {
task.configure {
configurations.findByName("embedded")?.let { embedded ->
dependsOn(embedded)
from {
@@ -86,9 +86,10 @@ fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
body()
project.runtimeJarArtifactBy(this, this)
}
return task
}
fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { })
fun Project.runtimeJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> = runtimeJar(getOrCreateTask("jar", body), { })
fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> {
val task = tasks.register<Jar>("sourcesJar") {
@@ -116,7 +117,7 @@ fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> {
return task
}
fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") {
fun Project.javadocJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> = getOrCreateTask("javadocJar") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
classifier = "javadoc"
tasks.findByName("javadoc")?.let { it as Javadoc }?.takeIf { it.enabled }?.let {
+39 -25
View File
@@ -3,8 +3,8 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.Project
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.task
import org.gradle.kotlin.dsl.*
import java.io.File
@@ -59,12 +59,12 @@ private fun ShadowJar.configureEmbeddableCompilerRelocation(withJavaxInject: Boo
}
}
private fun Project.compilerShadowJar(taskName: String, body: ShadowJar.() -> Unit): Jar {
private fun Project.compilerShadowJar(taskName: String, body: ShadowJar.() -> Unit): TaskProvider<out Jar> {
val compilerJar = configurations.getOrCreate("compilerJar")
dependencies.add(compilerJar.name, dependencies.project(":kotlin-compiler", configuration = "runtimeJar"))
return task<ShadowJar>(taskName) {
return tasks.register<ShadowJar>(taskName) {
destinationDir = File(buildDir, "libs")
setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE)
from(compilerJar)
@@ -72,31 +72,39 @@ private fun Project.compilerShadowJar(taskName: String, body: ShadowJar.() -> Un
}
}
fun Project.embeddableCompiler(taskName: String = "embeddable", body: ShadowJar.() -> Unit = {}): Jar =
compilerShadowJar(taskName) {
configureEmbeddableCompilerRelocation()
body()
}
fun Project.embeddableCompiler(taskName: String = "embeddable", body: ShadowJar.() -> Unit = {}): TaskProvider<out Jar> =
compilerShadowJar(taskName) {
configureEmbeddableCompilerRelocation()
body()
}
fun Project.compilerDummyForDependenciesRewriting(taskName: String = "compilerDummy", body: ShadowJar.() -> Unit = {}): Jar =
compilerShadowJar(taskName) {
exclude(packagesToExcludeFromDummy)
body()
}
fun Project.compilerDummyForDependenciesRewriting(
taskName: String = "compilerDummy", body: ShadowJar.() -> Unit = {}
): TaskProvider<out Jar> =
compilerShadowJar(taskName) {
exclude(packagesToExcludeFromDummy)
body()
}
const val COMPILER_DUMMY_JAR_CONFIGURATION_NAME = "compilerDummyJar"
fun Project.compilerDummyJar(task: Jar, body: Jar.() -> Unit = {}) {
task.body()
addArtifact(COMPILER_DUMMY_JAR_CONFIGURATION_NAME, task, task)
fun Project.compilerDummyJar(task: TaskProvider<out Jar>, body: Jar.() -> Unit = {}) {
task.configure(body)
task.configure {
addArtifact(COMPILER_DUMMY_JAR_CONFIGURATION_NAME, this, this)
}
}
fun Project.embeddableCompilerDummyForDependenciesRewriting(taskName: String = "embeddable", body: Jar.() -> Unit = {}): Jar {
fun Project.embeddableCompilerDummyForDependenciesRewriting(
taskName: String = "embeddable", body: Jar.() -> Unit = {}
): TaskProvider<ShadowJar> {
val compilerDummyJar = configurations.getOrCreate("compilerDummyJar")
dependencies.add(compilerDummyJar.name,
dependencies.project(":kotlin-compiler-embeddable", configuration = COMPILER_DUMMY_JAR_CONFIGURATION_NAME))
dependencies.add(
compilerDummyJar.name,
dependencies.project(":kotlin-compiler-embeddable", configuration = COMPILER_DUMMY_JAR_CONFIGURATION_NAME)
)
return task<ShadowJar>(taskName) {
return tasks.register<ShadowJar>(taskName) {
destinationDir = File(buildDir, "libs")
setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE)
from(compilerDummyJar)
@@ -105,14 +113,16 @@ fun Project.embeddableCompilerDummyForDependenciesRewriting(taskName: String = "
}
}
fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Jar, body: Jar.() -> Unit = {}): Jar {
originalJarTask.apply {
fun Project.rewriteDepsToShadedJar(
originalJarTask: TaskProvider<out Jar>, shadowJarTask: TaskProvider<out Jar>, body: Jar.() -> Unit = {}
): TaskProvider<out Jar> {
originalJarTask.configure {
classifier = "original"
}
val compilerDummyJarFile by lazy { configurations.getAt("compilerDummyJar").singleFile }
return shadowJarTask.apply {
shadowJarTask.configure {
dependsOn(originalJarTask)
from(originalJarTask)// { include("**") }
@@ -123,7 +133,11 @@ fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Jar, bod
classifier = ""
body()
}
return shadowJarTask
}
fun Project.rewriteDepsToShadedCompiler(originalJarTask: Jar, body: Jar.() -> Unit = {}): Jar =
rewriteDepsToShadedJar(originalJarTask, embeddableCompilerDummyForDependenciesRewriting(), body)
fun Project.rewriteDepsToShadedCompiler(originalJarTask: TaskProvider<out Jar>, body: Jar.() -> Unit = {}): TaskProvider<out Jar> =
rewriteDepsToShadedJar(originalJarTask, embeddableCompilerDummyForDependenciesRewriting(), body)
fun Project.rewriteDefaultJarDepsToShadedCompiler(body: Jar.() -> Unit = {}): TaskProvider<out Jar> =
rewriteDepsToShadedJar(tasks.named<Jar>("jar"), embeddableCompilerDummyForDependenciesRewriting(), body)
+5 -3
View File
@@ -21,6 +21,7 @@
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.internal.tasks.testing.filter.DefaultTestFilter
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.project
@@ -36,7 +37,7 @@ fun Project.projectTest(
parallel: Boolean = false,
shortenTempRootName: Boolean = false,
body: Test.() -> Unit = {}
): Test = getOrCreateTask(taskName) {
): TaskProvider<Test> = getOrCreateTask(taskName) {
doFirst {
val commandLineIncludePatterns = (filter as? DefaultTestFilter)?.commandLineIncludePatterns ?: emptySet()
val patterns = filter.includePatterns + commandLineIncludePatterns
@@ -141,8 +142,9 @@ fun Project.projectTest(
private inline fun String.isFirstChar(f: (Char) -> Boolean) = isNotEmpty() && f(first())
inline fun <reified T : Task> Project.getOrCreateTask(taskName: String, body: T.() -> Unit): T =
(tasks.findByName(taskName)?.let { it as T } ?: task<T>(taskName)).apply { body() }
inline fun <reified T : Task> Project.getOrCreateTask(taskName: String, noinline body: T.() -> Unit): TaskProvider<T> =
if (tasks.names.contains(taskName)) tasks.named(taskName, T::class.java).apply { configure(body) }
else tasks.register(taskName, T::class.java, body)
object TaskUtils {
fun useAndroidSdk(task: Task) {
+1 -3
View File
@@ -29,8 +29,6 @@ sourceSets {
publish()
val jar: Jar by tasks
runtimeJar(rewriteDepsToShadedCompiler(jar))
runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
sourcesJar()
javadocJar()
+1 -1
View File
@@ -50,7 +50,7 @@ publish()
noDefaultJar()
runtimeJar(task<ShadowJar>("shadowJar")) {
runtimeJar(tasks.register<ShadowJar>("shadowJar")) {
from(mainSourceSet.output)
}
@@ -65,7 +65,7 @@ publish()
noDefaultJar()
runtimeJar(task<ShadowJar>("shadowJar")) {
runtimeJar(tasks.register<ShadowJar>("shadowJar")) {
from(mainSourceSet.output)
}
@@ -34,7 +34,7 @@ fun Project.codegenTest(
target: Int, jvm: String, jdk: String,
targetInTestClass: String = "$target",
body: Test.() -> Unit
): Test = projectTest("codegenTarget${targetInTestClass}Jvm${jvm}Test") {
): TaskProvider<Test> = projectTest("codegenTarget${targetInTestClass}Jvm${jvm}Test") {
dependsOn(":dist")
workingDir = rootDir
+1 -1
View File
@@ -25,7 +25,7 @@ dependencies {
baseProtobufSources("com.google.protobuf:protobuf-java:$protobufVersion:sources")
}
val prepare = task<ShadowJar>("prepare") {
val prepare = tasks.register<ShadowJar>("prepare") {
destinationDir = File(outputJarsPath)
version = protobufVersion
classifier = ""
@@ -37,5 +37,5 @@ dependencies {
// Relocate `com.intellij.*` and some other classes to match those in the `kotlin-compiler-embeddable`
// (for example, the actual package at runtime is `org.jetbrains.kotlin.com.intellij.*`):
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
// In a standalone build, you can setup the relocation with the Shadow plugin.
@@ -54,7 +54,7 @@ if (deployVersion != null) {
noDefaultJar()
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
callGroovy("manifestAttributes", manifest, project)
manifest.attributes["Implementation-Version"] = version
@@ -29,7 +29,7 @@ publish()
noDefaultJar()
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))
@@ -23,7 +23,6 @@ publish()
noDefaultJar()
val jar = tasks.getByName<Jar>("jar")
runtimeJar(rewriteDepsToShadedCompiler(jar))
runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
sourcesJar()
javadocJar()
@@ -75,7 +75,7 @@ publishing {
publications {
create<MavenPublication>("internal") {
artifactId = "kotlin-stdlib-minimal-for-test"
artifact(jar)
artifact(jar.get())
}
}
+1 -1
View File
@@ -34,7 +34,7 @@ jar {
manifestAttributes(manifest, project)
}
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
artifacts {
archives sourcesJar
@@ -1,5 +1,4 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact
import org.gradle.jvm.tasks.Jar
description = "Kapt - Annotation processing for Kotlin"
@@ -22,13 +21,12 @@ projectTest(parallel = true) {
publish()
val jar: Jar by tasks
jar.apply {
tasks.named<Jar>("jar").configure {
classifier = "base"
}
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))
@@ -42,7 +42,7 @@ kotlin.target.compilations {
}
}
val runBenchmark by tasks.registering(JavaExec::class) {
val runBenchmark by tasks.registering<JavaExec> {
classpath = kotlin.target.compilations["benchmark"].run { runtimeDependencyFiles + output.allOutputs }
main = "com.example.ABenchmarkKt"
}
@@ -28,7 +28,7 @@ dependencies {
}
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))
@@ -13,8 +13,6 @@ plugins {
publish()
// todo: make lazy
val jar: Jar by tasks
val jarContents by configurations.creating
sourcesJar()
@@ -91,7 +89,7 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
configurations.compile.get().exclude("com.android.tools.external.com-intellij", "intellij-core")
}
runtimeJar(rewriteDepsToShadedCompiler(jar)) {
runtimeJar(rewriteDefaultJarDepsToShadedCompiler()).configure {
dependsOn(jarContents)
from {
+1 -1
View File
@@ -40,7 +40,7 @@ jar {
manifestAttributes(manifest, project)
}
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
artifacts {
archives sourcesJar
@@ -40,7 +40,7 @@ jar {
manifestAttributes(manifest, project)
}
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
artifacts {
archives sourcesJar
@@ -13,7 +13,8 @@ compileJava {
options.fork = false
}
jar {
TaskProvider<Jar> jar = tasks.named("jar")
jar.configure {
manifestAttributes(manifest, project)
}
@@ -28,7 +28,7 @@ jar {
manifestAttributes(manifest, project)
}
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDefaultJarDepsToShadedCompiler(project, {}), {})
artifacts {
archives sourcesJar
@@ -12,8 +12,7 @@ dependencies {
publish()
val jar: Jar by tasks
runtimeJar(rewriteDepsToShadedCompiler(jar))
runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
sourcesJar()
@@ -16,7 +16,7 @@ publish()
noDefaultJar()
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))
@@ -17,7 +17,7 @@ publish()
noDefaultJar()
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))
@@ -29,8 +29,7 @@ sourceSets {
publish()
val jar: Jar by tasks
runtimeJar(rewriteDepsToShadedCompiler(jar))
runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
sourcesJar()
+1 -1
View File
@@ -157,7 +157,7 @@ dependencies {
val jar = runtimeJar {
from("$rootDir/resources/kotlinManifest.properties")
archiveName = "kotlin-plugin.jar"
}
}.get() // make it eager to avoid corresponding refactorings in the kotlin-ultimate part for now
val ideaPluginDir: File by rootProject.extra
tasks.register<Sync>("ideaPlugin") {
@@ -12,8 +12,7 @@ dependencies {
publish()
val jar: Jar by tasks
runtimeJar(rewriteDepsToShadedCompiler(jar))
runtimeJar(rewriteDefaultJarDepsToShadedCompiler())
sourcesJar()
@@ -19,7 +19,7 @@ publish()
noDefaultJar()
runtimeJar(rewriteDepsToShadedCompiler(
task<ShadowJar>("shadowJar") {
tasks.register<ShadowJar>("shadowJar") {
from(packedJars)
}
))