Fix import library dependencies when transitive MPP are involved
Fix import dependencies of java modules on MPP modules when project was not build before import. Unresolved jar dependencies are not created any more on import of MPP project. #KT-28822 Fixed #KT-29757 Fixed
This commit is contained in:
+10
-7
@@ -159,12 +159,15 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
}
|
||||
}
|
||||
// create 'fake' dependency artifact files and put them into dependency substitution map
|
||||
mppArtifacts.forEach { (k, v) ->
|
||||
artifactToDependency[k]?.forEach { externalDependency ->
|
||||
for ((index, module) in v.withIndex()) {
|
||||
val fakeArtifact = "$k-MPP-$index"
|
||||
configArtifacts[fakeArtifact] = module
|
||||
externalDependency.addDependencyArtifactInternal(File(fakeArtifact))
|
||||
mppArtifacts.forEach { (filePath, moduleIds) ->
|
||||
moduleIds.firstOrNull()?.also { configArtifacts[filePath] = it }
|
||||
artifactToDependency[filePath]?.forEach { externalDependency ->
|
||||
for ((index, module) in moduleIds.withIndex()) {
|
||||
if (index != 0) {
|
||||
val fakeArtifact = "$filePath-MPP-$index"
|
||||
configArtifacts[fakeArtifact] = module
|
||||
externalDependency.addDependencyArtifactInternal(File(fakeArtifact))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -235,7 +238,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
mppModel.targets.filter { it.jar != null && it.jar!!.archiveFile != null }.forEach { target ->
|
||||
val path = toCanonicalPath(target.jar!!.archiveFile!!.absolutePath)
|
||||
val currentModules = userData[path] ?: ArrayList<String>().apply { userData[path] = this }
|
||||
//TODO possibly add support of test modules
|
||||
// Test modules should not be added. Otherwise we could get dependnecy of java.mail on jvmTest
|
||||
val allSourceSets = target.compilations.filter { !it.isTestModule }.flatMap { it.sourceSets }.toSet()
|
||||
val availableViaDependsOn = allSourceSets.flatMap { it.dependsOnSourceSets }.toSet()
|
||||
allSourceSets.filter { !availableViaDependsOn.contains(it.name) }.forEach { sourceSet ->
|
||||
|
||||
+119
@@ -578,6 +578,125 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test case for issue https://youtrack.jetbrains.com/issue/KT-29757
|
||||
*/
|
||||
@Test
|
||||
fun testJavaTransitiveOnMPP() {
|
||||
configureByFiles()
|
||||
importProject(true)
|
||||
|
||||
checkProjectStructure(true, false, true) {
|
||||
module("project") {}
|
||||
module("project.jvm") {}
|
||||
module("project.jvm.main") {
|
||||
moduleDependency("project.mpp-base.jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("project.mpp.jvmMain", DependencyScope.COMPILE)
|
||||
}
|
||||
module("project.jvm.test") {
|
||||
moduleDependency("project.jvm.main", DependencyScope.COMPILE)
|
||||
moduleDependency("project.mpp-base.jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("project.mpp.jvmMain", DependencyScope.COMPILE)
|
||||
}
|
||||
module("project.mpp") {}
|
||||
module("project.mpp.commonMain") {
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.COMPILE)
|
||||
}
|
||||
module("project.mpp.commonTest") {
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp.commonMain", DependencyScope.TEST)
|
||||
}
|
||||
module("project.mpp.jvmMain") {
|
||||
moduleDependency("project.mpp.commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("project.mpp-base.jvmMain", DependencyScope.COMPILE)
|
||||
}
|
||||
module("project.mpp.jvmTest") {
|
||||
moduleDependency("project.mpp.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp.commonTest", DependencyScope.TEST, true)
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp-base.jvmMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp.jvmMain", DependencyScope.TEST)
|
||||
}
|
||||
|
||||
module("project.mpp-base") {}
|
||||
module("project.mpp-base.commonMain") {}
|
||||
module("project.mpp-base.commonTest") {
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.TEST)
|
||||
}
|
||||
module("project.mpp-base.jvmMain") {
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.COMPILE)
|
||||
}
|
||||
module("project.mpp-base.jvmTest") {
|
||||
moduleDependency("project.mpp-base.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp-base.jvmMain", DependencyScope.TEST)
|
||||
moduleDependency("project.mpp-base.commonTest", DependencyScope.TEST, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test case for issue https://youtrack.jetbrains.com/issue/KT-28822
|
||||
*/
|
||||
@Test
|
||||
fun testImportBeforeBuild() {
|
||||
configureByFiles()
|
||||
importProject(true)
|
||||
|
||||
checkProjectStructure(true, false, true) {
|
||||
module("mpp-jardep") {}
|
||||
module("mpp-jardep.java-project") {}
|
||||
module("mpp-jardep.java-project.main") {
|
||||
moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("mpp-jardep.library2.jvmMain", DependencyScope.COMPILE)
|
||||
|
||||
}
|
||||
module("mpp-jardep.java-project.test") {
|
||||
moduleDependency("mpp-jardep.java-project.main", DependencyScope.COMPILE)
|
||||
moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("mpp-jardep.library2.jvmMain", DependencyScope.COMPILE)
|
||||
|
||||
}
|
||||
|
||||
module("mpp-jardep.library1") {}
|
||||
module("mpp-jardep.library1.commonMain") {}
|
||||
module("mpp-jardep.library1.commonTest") {
|
||||
moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.TEST)
|
||||
|
||||
}
|
||||
module("mpp-jardep.library1.jvmMain") {
|
||||
moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.COMPILE)
|
||||
|
||||
}
|
||||
module("mpp-jardep.library1.jvmTest") {
|
||||
moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("mpp-jardep.library1.commonTest", DependencyScope.TEST, true)
|
||||
moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.TEST)
|
||||
}
|
||||
|
||||
module("mpp-jardep.library2") {}
|
||||
module("mpp-jardep.library2.commonMain") {}
|
||||
module("mpp-jardep.library2.commonTest") {
|
||||
moduleDependency("mpp-jardep.library2.commonMain", DependencyScope.TEST)
|
||||
|
||||
}
|
||||
module("mpp-jardep.library2.jvmMain") {
|
||||
moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.COMPILE)
|
||||
moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.COMPILE)
|
||||
moduleDependency("mpp-jardep.library2.commonMain", DependencyScope.COMPILE)
|
||||
|
||||
}
|
||||
module("mpp-jardep.library2.jvmTest") {
|
||||
moduleDependency("mpp-jardep.library1.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("mpp-jardep.library1.jvmMain", DependencyScope.TEST)
|
||||
moduleDependency("mpp-jardep.library2.commonMain", DependencyScope.TEST)
|
||||
moduleDependency("mpp-jardep.library2.commonTest", DependencyScope.TEST, true)
|
||||
moduleDependency("mpp-jardep.library2.jvmMain", DependencyScope.TEST)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun testProductionOnTestFlag() {
|
||||
configureByFiles()
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
plugins {
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.3.41' apply false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
}
|
||||
|
||||
project('library1') {
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
|
||||
kotlin { targets { fromPreset(presets.jvm, 'jvm') } }
|
||||
}
|
||||
project('library2') {
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
|
||||
kotlin {
|
||||
targets { fromPreset(presets.jvm, 'jvm') }
|
||||
|
||||
sourceSets {
|
||||
jvmMain {
|
||||
dependencies {
|
||||
implementation project(':library1')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
project('java-project') {
|
||||
apply plugin: 'java'
|
||||
|
||||
dependencies {
|
||||
implementation project(':library1')
|
||||
implementation project(':library2')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
rootProject.name = 'mpp-jardep'
|
||||
|
||||
include "java-project"
|
||||
include "library1"
|
||||
include "library2"
|
||||
@@ -0,0 +1,20 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.3.41'
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
subprojects {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
apply plugin: 'kotlin-platform-jvm'
|
||||
|
||||
dependencies {
|
||||
compile project(':mpp')
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
commonMain {
|
||||
}
|
||||
|
||||
jvmMain {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
version = "0.1.0-${System.currentTimeMillis()}"
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
api project(':mpp-base')
|
||||
}
|
||||
}
|
||||
|
||||
jvmMain {
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
|
||||
include('mpp-base')
|
||||
include('mpp')
|
||||
include('jvm')
|
||||
|
||||
enableFeaturePreview('STABLE_PUBLISHING')
|
||||
Reference in New Issue
Block a user