Switch all common tasks in the root build script to lazy creation

This commit is contained in:
Ilya Chernikov
2019-08-13 17:31:06 +02:00
parent 5208318f34
commit f74c4fa538
+72 -66
View File
@@ -364,11 +364,13 @@ allprojects {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
} }
task("listArchives") { listConfigurationContents("archives") } tasks {
register("listArchives") { listConfigurationContents("archives") }
task("listRuntimeJar") { listConfigurationContents("runtimeJar") } register("listRuntimeJar") { listConfigurationContents("runtimeJar") }
task("listDistJar") { listConfigurationContents("distJar") } register("listDistJar") { listConfigurationContents("distJar") }
}
afterEvaluate { afterEvaluate {
if (javaHome != defaultJavaHome || jvmTarget != defaultJvmTarget) { if (javaHome != defaultJavaHome || jvmTarget != defaultJvmTarget) {
@@ -386,10 +388,12 @@ allprojects {
} catch (_: UnknownDomainObjectException) { } catch (_: UnknownDomainObjectException) {
null null
}?.let { javaConvention -> }?.let { javaConvention ->
task("printCompileClasspath") { doFirst { javaConvention.sourceSets["main"].compileClasspath.printClassPath("compile") } } tasks {
task("printRuntimeClasspath") { doFirst { javaConvention.sourceSets["main"].runtimeClasspath.printClassPath("runtime") } } register("printCompileClasspath") { doFirst { javaConvention.sourceSets["main"].compileClasspath.printClassPath("compile") } }
task("printTestCompileClasspath") { doFirst { javaConvention.sourceSets["test"].compileClasspath.printClassPath("test compile") } } register("printRuntimeClasspath") { doFirst { javaConvention.sourceSets["main"].runtimeClasspath.printClassPath("runtime") } }
task("printTestRuntimeClasspath") { doFirst { javaConvention.sourceSets["test"].runtimeClasspath.printClassPath("test runtime") } } register("printTestCompileClasspath") { doFirst { javaConvention.sourceSets["test"].compileClasspath.printClassPath("test compile") } }
register("printTestRuntimeClasspath") { doFirst { javaConvention.sourceSets["test"].runtimeClasspath.printClassPath("test runtime") } }
}
} }
run configureCompilerClasspath@{ run configureCompilerClasspath@{
@@ -446,26 +450,26 @@ val ideaPlugin by task<Task> {
} }
tasks { tasks {
create("clean") { register("clean") {
doLast { doLast {
delete("$buildDir/repo") delete("$buildDir/repo")
delete(distDir) delete(distDir)
} }
} }
create("cleanupArtifacts") { register("cleanupArtifacts") {
doLast { doLast {
delete(artifactsDir) delete(artifactsDir)
} }
} }
listOf("clean", "assemble", "install", "dist").forEach { taskName -> listOf("clean", "assemble", "install", "dist").forEach { taskName ->
create("coreLibs${taskName.capitalize()}") { register("coreLibs${taskName.capitalize()}") {
coreLibProjects.forEach { projectName -> dependsOn("$projectName:$taskName") } coreLibProjects.forEach { projectName -> dependsOn("$projectName:$taskName") }
} }
} }
create("coreLibsTest") { register("coreLibsTest") {
(coreLibProjects + listOf( (coreLibProjects + listOf(
":kotlin-stdlib:samples", ":kotlin-stdlib:samples",
":kotlin-test:kotlin-test-js:kotlin-test-js-it", ":kotlin-test:kotlin-test-js:kotlin-test-js-it",
@@ -476,17 +480,17 @@ tasks {
} }
} }
create("gradlePluginTest") { register("gradlePluginTest") {
gradlePluginProjects.forEach { gradlePluginProjects.forEach {
dependsOn("$it:check") dependsOn("$it:check")
} }
} }
create("gradlePluginIntegrationTest") { register("gradlePluginIntegrationTest") {
dependsOn(":kotlin-gradle-plugin-integration-tests:check") dependsOn(":kotlin-gradle-plugin-integration-tests:check")
} }
create("jvmCompilerTest") { register("jvmCompilerTest") {
dependsOn("dist") dependsOn("dist")
dependsOn( dependsOn(
":compiler:test", ":compiler:test",
@@ -497,19 +501,19 @@ tasks {
dependsOn(":plugins:jvm-abi-gen:test") dependsOn(":plugins:jvm-abi-gen:test")
} }
create("jsCompilerTest") { register("jsCompilerTest") {
dependsOn(":js:js.tests:test") dependsOn(":js:js.tests:test")
dependsOn(":js:js.tests:runMocha") dependsOn(":js:js.tests:runMocha")
} }
create("firCompilerTest") { register("firCompilerTest") {
dependsOn(":compiler:fir:psi2fir:test") dependsOn(":compiler:fir:psi2fir:test")
dependsOn(":compiler:fir:resolve:test") dependsOn(":compiler:fir:resolve:test")
dependsOn(":compiler:fir:fir2ir:test") dependsOn(":compiler:fir:fir2ir:test")
dependsOn(":compiler:fir:lightTree:test") dependsOn(":compiler:fir:lightTree:test")
} }
create("scriptingTest") { register("scriptingTest") {
dependsOn("dist") dependsOn("dist")
dependsOn(":kotlin-script-util:test") dependsOn(":kotlin-script-util:test")
dependsOn(":kotlin-scripting-compiler:test") dependsOn(":kotlin-scripting-compiler:test")
@@ -520,7 +524,7 @@ tasks {
dependsOn(":kotlin-main-kts-test:test") dependsOn(":kotlin-main-kts-test:test")
} }
create("compilerTest") { register("compilerTest") {
dependsOn("jvmCompilerTest") dependsOn("jvmCompilerTest")
dependsOn("jsCompilerTest") dependsOn("jsCompilerTest")
dependsOn("firCompilerTest") dependsOn("firCompilerTest")
@@ -531,44 +535,44 @@ tasks {
dependsOn(":core:descriptors.runtime:test") dependsOn(":core:descriptors.runtime:test")
} }
create("toolsTest") { register("toolsTest") {
dependsOn(":tools:kotlinp:test") dependsOn(":tools:kotlinp:test")
} }
create("examplesTest") { register("examplesTest") {
dependsOn("dist") dependsOn("dist")
(project(":examples").subprojects + project(":kotlin-gradle-subplugin-example")).forEach { p -> (project(":examples").subprojects + project(":kotlin-gradle-subplugin-example")).forEach { p ->
dependsOn("${p.path}:check") dependsOn("${p.path}:check")
} }
} }
create("distTest") { register("distTest") {
dependsOn("compilerTest") dependsOn("compilerTest")
dependsOn("toolsTest") dependsOn("toolsTest")
dependsOn("gradlePluginTest") dependsOn("gradlePluginTest")
dependsOn("examplesTest") dependsOn("examplesTest")
} }
create("specTest") { register("specTest") {
dependsOn("dist") dependsOn("dist")
dependsOn(":compiler:tests-spec:test") dependsOn(":compiler:tests-spec:test")
} }
create("androidCodegenTest") { register("androidCodegenTest") {
dependsOn(":compiler:android-tests:test") dependsOn(":compiler:android-tests:test")
} }
create("jps-tests") { register("jps-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn(":jps-plugin:test") dependsOn(":jps-plugin:test")
} }
create("idea-plugin-main-tests") { register("idea-plugin-main-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn(":idea:test") dependsOn(":idea:test")
} }
create("idea-plugin-additional-tests") { register("idea-plugin-additional-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn( dependsOn(
":idea:idea-gradle:test", ":idea:idea-gradle:test",
@@ -583,7 +587,7 @@ tasks {
) )
} }
create("idea-plugin-tests") { register("idea-plugin-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn( dependsOn(
"idea-plugin-main-tests", "idea-plugin-main-tests",
@@ -591,7 +595,7 @@ tasks {
) )
} }
create("android-ide-tests") { register("android-ide-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn( dependsOn(
":plugins:android-extensions-ide:test", ":plugins:android-extensions-ide:test",
@@ -600,7 +604,7 @@ tasks {
) )
} }
create("plugins-tests") { register("plugins-tests") {
dependsOn("dist") dependsOn("dist")
dependsOn( dependsOn(
":kotlin-annotation-processing:test", ":kotlin-annotation-processing:test",
@@ -616,7 +620,7 @@ tasks {
} }
create("ideaPluginTest") { register("ideaPluginTest") {
dependsOn( dependsOn(
"idea-plugin-tests", "idea-plugin-tests",
"jps-tests", "jps-tests",
@@ -627,13 +631,13 @@ tasks {
} }
create("test") { register("test") {
doLast { doLast {
throw GradleException("Don't use directly, use aggregate tasks *-check instead") throw GradleException("Don't use directly, use aggregate tasks *-check instead")
} }
} }
create("check") { register("check") {
dependsOn("test") dependsOn("test")
} }
} }
@@ -772,49 +776,51 @@ fun Project.configureShadowJarSubstitutionInCompileClasspath() {
} }
} }
tasks.create("findShadowJarsInClasspath").doLast { tasks.register("findShadowJarsInClasspath") {
fun Collection<File>.printSorted(indent: String = " ") { doLast {
sortedBy { it.path }.forEach { println(indent + it.relativeTo(rootProject.projectDir)) } fun Collection<File>.printSorted(indent: String = " ") {
} sortedBy { it.path }.forEach { println(indent + it.relativeTo(rootProject.projectDir)) }
val mainJars = hashSetOf<File>()
val shadowJars = hashSetOf<File>()
for (project in rootProject.allprojects) {
project.withJavaPlugin {
project.sourceSets.forEach { sourceSet ->
val jarTask = project.tasks.findByPath(sourceSet.jarTaskName) as? Jar
jarTask?.outputFile?.let { mainJars.add(it) }
}
} }
for (task in project.tasks) {
when (task) { val mainJars = hashSetOf<File>()
is ShadowJar -> { val shadowJars = hashSetOf<File>()
shadowJars.add(fileFrom(task.outputFile)) for (project in rootProject.allprojects) {
project.withJavaPlugin {
project.sourceSets.forEach { sourceSet ->
val jarTask = project.tasks.findByPath(sourceSet.jarTaskName) as? Jar
jarTask?.outputFile?.let { mainJars.add(it) }
} }
is ProGuardTask -> { }
shadowJars.addAll(task.outputs.files.toList()) for (task in project.tasks) {
when (task) {
is ShadowJar -> {
shadowJars.add(fileFrom(task.outputFile))
}
is ProGuardTask -> {
shadowJars.addAll(task.outputs.files.toList())
}
} }
} }
} }
}
shadowJars.removeAll(mainJars) shadowJars.removeAll(mainJars)
println("Shadow jars that might break incremental compilation:") println("Shadow jars that might break incremental compilation:")
shadowJars.printSorted() shadowJars.printSorted()
fun Project.checkConfig(configName: String) { fun Project.checkConfig(configName: String) {
val config = configurations.findByName(configName) ?: return val config = configurations.findByName(configName) ?: return
val shadowJarsInConfig = config.resolvedConfiguration.files.filter { it in shadowJars } val shadowJarsInConfig = config.resolvedConfiguration.files.filter { it in shadowJars }
if (shadowJarsInConfig.isNotEmpty()) { if (shadowJarsInConfig.isNotEmpty()) {
println() println()
println("Project $project contains shadow jars in configuration '$configName':") println("Project $project contains shadow jars in configuration '$configName':")
shadowJarsInConfig.printSorted() shadowJarsInConfig.printSorted()
}
} }
}
for (project in rootProject.allprojects) { for (project in rootProject.allprojects) {
project.sourceSetsOrNull?.forEach { sourceSet -> project.sourceSetsOrNull?.forEach { sourceSet ->
project.checkConfig(sourceSet.compileClasspathConfigurationName) project.checkConfig(sourceSet.compileClasspathConfigurationName)
}
} }
} }
} }