[Gradle] Fix adding additional res dirs to KotlinSourceSet does not work
In case of "org.jetbrains.kotlin.jvm" plugin Java SourceSet will create ProcessResources task copying all registered resources. ^KT-36904 Fixed
This commit is contained in:
committed by
Space Team
parent
958b0e6ebc
commit
a2c874572a
+38
-3
@@ -6,10 +6,8 @@ import org.gradle.util.GradleVersion
|
|||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
|
||||||
import org.jetbrains.kotlin.gradle.testbase.*
|
import org.jetbrains.kotlin.gradle.testbase.*
|
||||||
import org.junit.jupiter.api.DisplayName
|
import org.junit.jupiter.api.DisplayName
|
||||||
import kotlin.io.path.appendText
|
|
||||||
import kotlin.io.path.createDirectories
|
|
||||||
import kotlin.io.path.createFile
|
|
||||||
import java.util.zip.ZipFile
|
import java.util.zip.ZipFile
|
||||||
|
import kotlin.io.path.*
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
@DisplayName("KGP simple tests")
|
@DisplayName("KGP simple tests")
|
||||||
@@ -320,4 +318,41 @@ class SimpleKotlinGradleIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DisplayName("KT-36904: Adding resources to Kotlin source set should work")
|
||||||
|
@GradleTest
|
||||||
|
internal fun addResourcesKotlinSourceSet(gradleVersion: GradleVersion) {
|
||||||
|
project("simpleProject", gradleVersion) {
|
||||||
|
val mainResDir = projectPath.resolve("src/main/resources").apply { createDirectories() }
|
||||||
|
val mainResFile = mainResDir.resolve("main.txt").apply { writeText("Yay, Kotlin!") }
|
||||||
|
|
||||||
|
val additionalResDir = projectPath.resolve("additionalRes").apply { createDirectory() }
|
||||||
|
val additionalResFile = additionalResDir.resolve("test.txt").apply { writeText("Kotlin!") }
|
||||||
|
|
||||||
|
buildGradle.appendText(
|
||||||
|
//language=groovy
|
||||||
|
"""
|
||||||
|
|
|
||||||
|
|kotlin {
|
||||||
|
| sourceSets.main.resources.srcDir("additionalRes")
|
||||||
|
|}
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
|
||||||
|
build("jar") {
|
||||||
|
assertFileInProjectExists("build/libs/simpleProject.jar")
|
||||||
|
ZipFile(projectPath.resolve("build/libs/simpleProject.jar").toFile()).use { jar ->
|
||||||
|
assert(jar.entries().asSequence().count { it.name == mainResFile.name } == 1) {
|
||||||
|
"The jar should contain one entry `${mainResFile.name}` with no duplicates\n" +
|
||||||
|
jar.entries().asSequence().map { it.name }.joinToString()
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(jar.entries().asSequence().count { it.name == additionalResFile.name } == 1) {
|
||||||
|
"The jar should contain one entry `${additionalResFile.name}` with no duplicates\n" +
|
||||||
|
jar.entries().asSequence().map { it.name }.joinToString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -185,6 +185,13 @@ internal abstract class AbstractKotlinPlugin(
|
|||||||
if (duplicateJavaSourceSetsAsKotlinSourceSets) {
|
if (duplicateJavaSourceSetsAsKotlinSourceSets) {
|
||||||
val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(kotlinCompilation.name)
|
val kotlinSourceSet = project.kotlinExtension.sourceSets.maybeCreate(kotlinCompilation.name)
|
||||||
kotlinSourceSet.kotlin.source(javaSourceSet.java)
|
kotlinSourceSet.kotlin.source(javaSourceSet.java)
|
||||||
|
// Registering resources from KotlinSourceSet as Java SourceSet resources. In case of KotlinPlugin
|
||||||
|
// Java Sources set will create ProcessResources task to process all resources into output
|
||||||
|
// 'kotlinSourceSet.resources' should contain Java SourceSet default resource directories and to avoid
|
||||||
|
// duplication error we are replacing here already configured default one.
|
||||||
|
javaSourceSet.resources.setSrcDirs(
|
||||||
|
listOf { kotlinSourceSet.resources.sourceDirectories }
|
||||||
|
)
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
kotlinCompilation.source(kotlinSourceSet)
|
kotlinCompilation.source(kotlinSourceSet)
|
||||||
project.compatibilityConventionRegistrar.addConvention(javaSourceSet, kotlinSourceSetDslName, kotlinSourceSet)
|
project.compatibilityConventionRegistrar.addConvention(javaSourceSet, kotlinSourceSetDslName, kotlinSourceSet)
|
||||||
|
|||||||
Reference in New Issue
Block a user