Add transitive test dependencies on MPP with jvmWithJava on import
Fixed case when production and test source sets depend on MPP module with jvmWithJava involved and have dependency on the same jar artifact.
This commit is contained in:
+9
-5
@@ -144,23 +144,27 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
// processing case when one artifact could be produced by several (actualized!)source sets
|
// processing case when one artifact could be produced by several (actualized!)source sets
|
||||||
if (mppArtifacts.isNotEmpty() && resolverCtx.isResolveModulePerSourceSet) {
|
if (mppArtifacts.isNotEmpty() && resolverCtx.isResolveModulePerSourceSet) {
|
||||||
val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java)
|
val externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject::class.java)
|
||||||
val artifactToDependency = HashMap<String, ExternalDependency>()
|
|
||||||
|
//Note! Should not use MultiValuesMap as it contains Set of values, but we need comparision === instead of ==
|
||||||
|
val artifactToDependency = HashMap<String, MutableCollection<ExternalDependency>>()
|
||||||
externalProject?.sourceSets?.values?.forEach { sourceSet ->
|
externalProject?.sourceSets?.values?.forEach { sourceSet ->
|
||||||
sourceSet.dependencies.forEach { dependency ->
|
sourceSet.dependencies.forEach { dependency ->
|
||||||
dependency.getDependencyArtifacts().map { toCanonicalPath(it.absolutePath) }
|
dependency.getDependencyArtifacts().map { toCanonicalPath(it.absolutePath) }
|
||||||
.filter { mppArtifacts.keys.contains(it) }.forEach {
|
.filter { mppArtifacts.keys.contains(it) }.forEach {filePath ->
|
||||||
artifactToDependency[it] = dependency
|
(artifactToDependency[filePath] ?: ArrayList<ExternalDependency>().also { newCollection ->
|
||||||
|
artifactToDependency[filePath] = newCollection
|
||||||
|
}).add(dependency)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// create 'fake' dependency artifact files and put them into dependency substitution map
|
// create 'fake' dependency artifact files and put them into dependency substitution map
|
||||||
mppArtifacts.forEach { (k, v) ->
|
mppArtifacts.forEach { (k, v) ->
|
||||||
artifactToDependency[k]?.apply {
|
artifactToDependency[k]?.forEach { externalDependency ->
|
||||||
for ((index, module) in v.withIndex()) {
|
for ((index, module) in v.withIndex()) {
|
||||||
val fakeArtifact = "$k-MPP-$index"
|
val fakeArtifact = "$k-MPP-$index"
|
||||||
configArtifacts[fakeArtifact] = module
|
configArtifacts[fakeArtifact] = module
|
||||||
this.addDependencyArtifactInternal(File(fakeArtifact))
|
externalDependency.addDependencyArtifactInternal(File(fakeArtifact))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -586,7 +586,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
|
|||||||
checkProjectStructure(false, false, false ) {
|
checkProjectStructure(false, false, false ) {
|
||||||
module("project.javaModule.test") {
|
module("project.javaModule.test") {
|
||||||
moduleDependency("project.mppModule.jvmTest", DependencyScope.TEST, true)
|
moduleDependency("project.mppModule.jvmTest", DependencyScope.TEST, true)
|
||||||
moduleDependency("project.mppModule.jvmMain", DependencyScope.TEST, false)
|
moduleDependency("project.mppModule.jvmMain", DependencyScope.COMPILE, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user