From 93138a3f4a602253f28bb85fa421bdb6bd2afdb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20W=C3=BCrthner?= Date: Mon, 4 Nov 2024 10:04:25 +0100 Subject: [PATCH] Only task to leave projects --- .../GradleBomPluginFunctionalTest.kt | 27 ++++++++++++++++++- .../iodigital/gradlebom/GradleBomPlugin.kt | 26 +++++++++--------- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/gradle-bom/src/functionalTest/java/com/iodigital/gradlebom/GradleBomPluginFunctionalTest.kt b/gradle-bom/src/functionalTest/java/com/iodigital/gradlebom/GradleBomPluginFunctionalTest.kt index 43c4be7..3ffcadd 100644 --- a/gradle-bom/src/functionalTest/java/com/iodigital/gradlebom/GradleBomPluginFunctionalTest.kt +++ b/gradle-bom/src/functionalTest/java/com/iodigital/gradlebom/GradleBomPluginFunctionalTest.kt @@ -27,11 +27,35 @@ class GradleBomPluginFunctionalTest { """.trimIndent() ) + writeString( + File(projectDir, "child/build.gradle"), + """ + dependencies { + } + """.trimIndent() + ) + + writeString( + File(projectDir, "child/child/build.gradle"), + """ + dependencies { + } + """.trimIndent() + ) + + writeString( + File(projectDir, "settings.gradle"), + """ + include(":child") + include(":child:child") + """.trimIndent() + ) + // Run the build val result = GradleRunner.create() .forwardOutput() .withPluginClasspath() - .withArguments("generateBom", "--configuration=test") + .withArguments(":generateBom", "--configuration=test") .withProjectDir(projectDir) .withEnvironment(mapOf("mockDependencyTreeFile" to mockFile.absolutePath)) .build() @@ -65,6 +89,7 @@ class GradleBomPluginFunctionalTest { @Throws(IOException::class) private fun writeString(file: File, string: String) { + file.parentFile.mkdirs() FileWriter(file).use { writer -> writer.write(string) } diff --git a/gradle-bom/src/main/java/com/iodigital/gradlebom/GradleBomPlugin.kt b/gradle-bom/src/main/java/com/iodigital/gradlebom/GradleBomPlugin.kt index c49b53e..67e589c 100644 --- a/gradle-bom/src/main/java/com/iodigital/gradlebom/GradleBomPlugin.kt +++ b/gradle-bom/src/main/java/com/iodigital/gradlebom/GradleBomPlugin.kt @@ -19,26 +19,28 @@ class GradleBomPlugin : Plugin { private fun Project.createTasks(): Unit = afterEvaluate { val suffix = "Implementation" - project.tasks.register( - "generateBom", - GenericGenerateModuleBomTask::class.java - ) + // Skip if already added + if (!project.tasks.names.contains("generateBom")) { + project.tasks.register( + "generateBom", + GenericGenerateModuleBomTask::class.java + ) - configurations - .filter { it.name.endsWith(suffix) } - .map { it.name.removeSuffix(suffix) } - .distinct() - .sorted() - .forEach { config -> - if (project.subprojects.isEmpty()) { + configurations + .filter { it.name.endsWith(suffix) } + .map { it.name.removeSuffix(suffix) } + .distinct() + .sorted() + .forEach { config -> project.tasks.register( "generate${config.replaceFirstChar { it.uppercase() }}Bom", SpecificGenerateModuleBomTask::class.java, config ) } - } + } + // Iterate over subprojects subprojects.forEach { sub -> sub.createTasks() }