Add test tasks to targets configured with KotlinTargetConfigurator
This commit is contained in:
+47
-20
@@ -20,7 +20,9 @@ import org.gradle.api.file.FileCollection
|
|||||||
import org.gradle.api.internal.artifacts.ArtifactAttributes
|
import org.gradle.api.internal.artifacts.ArtifactAttributes
|
||||||
import org.gradle.api.internal.plugins.DslObject
|
import org.gradle.api.internal.plugins.DslObject
|
||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
|
import org.gradle.api.plugins.JavaBasePlugin
|
||||||
import org.gradle.api.tasks.bundling.Jar
|
import org.gradle.api.tasks.bundling.Jar
|
||||||
|
import org.gradle.api.tasks.testing.Test
|
||||||
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
|
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
import org.gradle.language.jvm.tasks.ProcessResources
|
import org.gradle.language.jvm.tasks.ProcessResources
|
||||||
@@ -30,6 +32,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.fullName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.fullName
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.Callable
|
import java.util.concurrent.Callable
|
||||||
|
|
||||||
@@ -37,22 +40,20 @@ open class KotlinTargetConfigurator(
|
|||||||
private val buildOutputCleanupRegistry: BuildOutputCleanupRegistry
|
private val buildOutputCleanupRegistry: BuildOutputCleanupRegistry
|
||||||
) {
|
) {
|
||||||
fun <KotlinCompilationType: KotlinCompilation> configureTarget(
|
fun <KotlinCompilationType: KotlinCompilation> configureTarget(
|
||||||
project: Project,
|
|
||||||
target: KotlinOnlyTarget<KotlinCompilationType>
|
target: KotlinOnlyTarget<KotlinCompilationType>
|
||||||
) {
|
) {
|
||||||
configureCompilationDefaults(project, target)
|
configureCompilationDefaults(target)
|
||||||
configureCompilations(project, target)
|
configureCompilations(target)
|
||||||
defineConfigurationsForTarget(project, target)
|
defineConfigurationsForTarget(target)
|
||||||
configureArchivesAndComponent(project, target)
|
configureArchivesAndComponent(target)
|
||||||
configureBuild(project, target)
|
configureTest(target)
|
||||||
|
configureBuild(target)
|
||||||
|
|
||||||
setCompatibilityOfAbstractCompileTasks(project)
|
setCompatibilityOfAbstractCompileTasks(target.project)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <KotlinCompilationType: KotlinCompilation> configureCompilations(
|
private fun <KotlinCompilationType: KotlinCompilation> configureCompilations(platformTarget: KotlinOnlyTarget<KotlinCompilationType>) {
|
||||||
project: Project,
|
val project = platformTarget.project
|
||||||
platformTarget: KotlinOnlyTarget<KotlinCompilationType>
|
|
||||||
) {
|
|
||||||
val main = platformTarget.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME)
|
val main = platformTarget.compilations.create(KotlinCompilation.MAIN_COMPILATION_NAME)
|
||||||
|
|
||||||
platformTarget.compilations.create(KotlinCompilation.TEST_COMPILATION_NAME).apply {
|
platformTarget.compilations.create(KotlinCompilation.TEST_COMPILATION_NAME).apply {
|
||||||
@@ -68,7 +69,9 @@ open class KotlinTargetConfigurator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <KotlinCompilationType: KotlinCompilation> configureCompilationDefaults(project: Project, target: KotlinOnlyTarget<KotlinCompilationType>) {
|
private fun <KotlinCompilationType: KotlinCompilation> configureCompilationDefaults(target: KotlinOnlyTarget<KotlinCompilationType>) {
|
||||||
|
val project = target.project
|
||||||
|
|
||||||
target.compilations.all { compilation ->
|
target.compilations.all { compilation ->
|
||||||
defineConfigurationsForCompilation(compilation, target, project.configurations)
|
defineConfigurationsForCompilation(compilation, target, project.configurations)
|
||||||
|
|
||||||
@@ -77,14 +80,16 @@ open class KotlinTargetConfigurator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (compilation is KotlinCompilationWithResources) {
|
if (compilation is KotlinCompilationWithResources) {
|
||||||
configureResourceProcessing(project, compilation, project.files())
|
configureResourceProcessing(compilation, project.files())
|
||||||
}
|
}
|
||||||
|
|
||||||
createLifecycleTask(compilation, project)
|
createLifecycleTask(compilation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureArchivesAndComponent(project: Project, target: KotlinOnlyTarget<*>) {
|
private fun configureArchivesAndComponent(target: KotlinOnlyTarget<*>) {
|
||||||
|
val project = target.project
|
||||||
|
|
||||||
val mainCompilation = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
|
val mainCompilation = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
|
||||||
|
|
||||||
val jar = project.tasks.create(target.artifactsTaskName, Jar::class.java)
|
val jar = project.tasks.create(target.artifactsTaskName, Jar::class.java)
|
||||||
@@ -92,7 +97,6 @@ open class KotlinTargetConfigurator(
|
|||||||
jar.group = BasePlugin.BUILD_GROUP
|
jar.group = BasePlugin.BUILD_GROUP
|
||||||
jar.from(mainCompilation.output)
|
jar.from(mainCompilation.output)
|
||||||
|
|
||||||
val jarArtifact = ArchivePublishArtifact(jar)
|
|
||||||
val apiElementsConfiguration = project.configurations.getByName(target.apiElementsConfigurationName)
|
val apiElementsConfiguration = project.configurations.getByName(target.apiElementsConfigurationName)
|
||||||
|
|
||||||
target.disambiguationClassifier?.let { jar.classifier = it }
|
target.disambiguationClassifier?.let { jar.classifier = it }
|
||||||
@@ -125,11 +129,27 @@ open class KotlinTargetConfigurator(
|
|||||||
publications.attributes.attribute(ArtifactAttributes.ARTIFACT_FORMAT, ArtifactTypeDefinition.JAR_TYPE)
|
publications.attributes.attribute(ArtifactAttributes.ARTIFACT_FORMAT, ArtifactTypeDefinition.JAR_TYPE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun configureTest(target: KotlinTarget) {
|
||||||
|
val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME) as? KotlinCompilationToRunnableFiles
|
||||||
|
?: return // Otherwise, there is no runtime classpath
|
||||||
|
|
||||||
|
target.project.tasks.create(lowerCamelCaseName(target.targetName, testTaskNameSuffix), Test::class.java).apply {
|
||||||
|
project.afterEvaluate { // use afterEvaluate to override the JavaPlugin defaults for Test tasks
|
||||||
|
conventionMapping.map("testClassesDirs") { testCompilation.output.classesDirs }
|
||||||
|
conventionMapping.map("classpath") { testCompilation.runtimeDependencyFiles }
|
||||||
|
description = "Runs the unit tests."
|
||||||
|
group = JavaBasePlugin.VERIFICATION_GROUP
|
||||||
|
target.project.tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)?.dependsOn(this@apply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun configureResourceProcessing(
|
private fun configureResourceProcessing(
|
||||||
project: Project,
|
|
||||||
compilation: KotlinCompilationWithResources,
|
compilation: KotlinCompilationWithResources,
|
||||||
resourceSet: FileCollection
|
resourceSet: FileCollection
|
||||||
) {
|
) {
|
||||||
|
val project = compilation.target.project
|
||||||
|
|
||||||
compilation.output.setResourcesDir(Callable {
|
compilation.output.setResourcesDir(Callable {
|
||||||
val classesDirName = "resources/" + compilation.compilationName
|
val classesDirName = "resources/" + compilation.compilationName
|
||||||
File(project.buildDir, classesDirName)
|
File(project.buildDir, classesDirName)
|
||||||
@@ -141,7 +161,9 @@ open class KotlinTargetConfigurator(
|
|||||||
resourcesTask.from(resourceSet)
|
resourcesTask.from(resourceSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createLifecycleTask(compilation: KotlinCompilation, project: Project) {
|
private fun createLifecycleTask(compilation: KotlinCompilation) {
|
||||||
|
val project = compilation.target.project
|
||||||
|
|
||||||
(compilation.output.classesDirs as ConfigurableFileCollection).from(project.files().builtBy(compilation.compileAllTaskName))
|
(compilation.output.classesDirs as ConfigurableFileCollection).from(project.files().builtBy(compilation.compileAllTaskName))
|
||||||
|
|
||||||
project.tasks.create(compilation.compileAllTaskName).apply {
|
project.tasks.create(compilation.compileAllTaskName).apply {
|
||||||
@@ -157,7 +179,9 @@ open class KotlinTargetConfigurator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun defineConfigurationsForTarget(project: Project, target: KotlinOnlyTarget<*>) {
|
private fun defineConfigurationsForTarget(target: KotlinOnlyTarget<*>) {
|
||||||
|
val project = target.project
|
||||||
|
|
||||||
val configurations = project.configurations
|
val configurations = project.configurations
|
||||||
|
|
||||||
val defaultConfiguration = configurations.maybeCreate(target.defaultConfigurationName)
|
val defaultConfiguration = configurations.maybeCreate(target.defaultConfigurationName)
|
||||||
@@ -212,7 +236,8 @@ open class KotlinTargetConfigurator(
|
|||||||
defaultConfiguration.extendsFrom(runtimeElementsConfiguration).usesPlatformOf(target)
|
defaultConfiguration.extendsFrom(runtimeElementsConfiguration).usesPlatformOf(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureBuild(project: Project, target: KotlinOnlyTarget<*>) {
|
private fun configureBuild(target: KotlinOnlyTarget<*>) {
|
||||||
|
val project = target.project
|
||||||
val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME)
|
val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME)
|
||||||
project.tasks.maybeCreate(buildNeededTaskName, DefaultTask::class.java).apply {
|
project.tasks.maybeCreate(buildNeededTaskName, DefaultTask::class.java).apply {
|
||||||
description = "Assembles and tests this project and all projects it depends on."
|
description = "Assembles and tests this project and all projects it depends on."
|
||||||
@@ -259,6 +284,8 @@ open class KotlinTargetConfigurator(
|
|||||||
const val buildNeededTaskName = "buildAllNeeded"
|
const val buildNeededTaskName = "buildAllNeeded"
|
||||||
const val buildDependentTaskName = "buildAllDependents"
|
const val buildDependentTaskName = "buildAllDependents"
|
||||||
|
|
||||||
|
const val testTaskNameSuffix = "test"
|
||||||
|
|
||||||
fun defineConfigurationsForCompilation(
|
fun defineConfigurationsForCompilation(
|
||||||
compilation: KotlinCompilation,
|
compilation: KotlinCompilation,
|
||||||
target: KotlinTarget,
|
target: KotlinTarget,
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ abstract class KotlinOnlyTargetPreset<T : KotlinCompilation>(
|
|||||||
compilations = project.container(compilationFactory.itemClass, compilationFactory)
|
compilations = project.container(compilationFactory.itemClass, compilationFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinTargetConfigurator(buildOutputCleanupRegistry).configureTarget(project, result)
|
KotlinTargetConfigurator(buildOutputCleanupRegistry).configureTarget(result)
|
||||||
|
|
||||||
result.compilations.all { compilation ->
|
result.compilations.all { compilation ->
|
||||||
buildCompilationProcessor(compilation).run()
|
buildCompilationProcessor(compilation).run()
|
||||||
|
|||||||
Reference in New Issue
Block a user