[Gradle, JS] Not publish npm dependency constraints in metadata

^KT-41054 fixed
This commit is contained in:
Ilya Goncharov
2020-07-31 17:33:38 +03:00
parent 0473648b0e
commit 30f78847b1
4 changed files with 58 additions and 31 deletions
@@ -10,24 +10,22 @@ import org.gradle.api.DomainObjectSet
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.ConfigurablePublishArtifact
import org.gradle.api.artifacts.DependencyConstraint
import org.gradle.api.artifacts.PublishArtifact
import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS
import org.gradle.api.component.ComponentWithCoordinates
import org.gradle.api.component.ComponentWithVariants
import org.gradle.api.component.SoftwareComponent
import org.gradle.api.component.SoftwareComponentFactory
import org.gradle.api.component.*
import org.gradle.api.internal.component.SoftwareComponentInternal
import org.gradle.api.internal.component.UsageContext
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.provider.Provider
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.util.ConfigureUtil
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependencyConstraint
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -125,23 +123,43 @@ abstract class AbstractKotlinTarget(
adhocVariant as SoftwareComponent
if (kotlinVariant is KotlinVariantWithMetadataVariant) {
object : ComponentWithVariants, ComponentWithCoordinates, SoftwareComponentInternal {
override fun getCoordinates() = kotlinVariant.coordinates
override fun getVariants(): Set<out SoftwareComponent> = kotlinVariant.variants
override fun getName(): String = adhocVariant.name
override fun getUsages(): MutableSet<out UsageContext> = (adhocVariant as SoftwareComponentInternal).usages
}
} else {
object : ComponentWithCoordinates, SoftwareComponentInternal {
override fun getCoordinates() = (kotlinVariant as? ComponentWithCoordinates)?.coordinates
override fun getName(): String = adhocVariant.name
override fun getUsages(): MutableSet<out UsageContext> = (adhocVariant as SoftwareComponentInternal).usages
}
}
creatAdHocComponent(kotlinVariant, adhocVariant)
}.toSet()
}
private fun creatAdHocComponent(
kotlinVariant: KotlinTargetComponent,
adhocVariant: AdhocComponentWithVariants
) = if (kotlinVariant is KotlinVariantWithMetadataVariant) {
object : ComponentWithVariants, ComponentWithCoordinates, SoftwareComponentInternal {
override fun getCoordinates() = kotlinVariant.coordinates
override fun getVariants(): Set<out SoftwareComponent> = kotlinVariant.variants
override fun getName(): String = adhocVariant.name
override fun getUsages(): MutableSet<out UsageContext> =
getUsages(adhocVariant as SoftwareComponentInternal)
}
} else {
object : ComponentWithCoordinates, SoftwareComponentInternal {
override fun getCoordinates() = (kotlinVariant as? ComponentWithCoordinates)?.coordinates
override fun getName(): String = adhocVariant.name
override fun getUsages(): MutableSet<out UsageContext> =
getUsages(adhocVariant as SoftwareComponentInternal)
}
}
private fun getUsages(component: SoftwareComponentInternal): MutableSet<out UsageContext> =
component
.usages
.map { usageContext ->
object : UsageContext by usageContext {
override fun getDependencyConstraints(): MutableSet<out DependencyConstraint> =
usageContext.dependencyConstraints
.filterNot { it is NpmDependencyConstraint }
.toMutableSet()
}
}
.toMutableSet()
protected open fun createKotlinVariant(
componentName: String,
compilation: KotlinCompilation<*>,
@@ -192,6 +192,17 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension
}
}
internal fun putNpmResolution(
path: String,
version: String
) {
with(state) {
if (this is ResolutionState.Configuring) {
resolver.resolutions[path] = version
}
}
}
internal fun getNpmDependencyResolvedCompilation(npmDependency: NpmDependency): KotlinCompilationNpmResolution? {
val project = npmDependency.project
@@ -9,7 +9,6 @@ import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.artifacts.*
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.internal.artifacts.DefaultModuleIdentifier
import org.gradle.api.internal.artifacts.dependencies.DefaultMutableVersionConstraint
import org.gradle.api.internal.artifacts.dependencies.DependencyConstraintInternal
import org.gradle.api.internal.attributes.ImmutableAttributes
@@ -17,17 +16,15 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
class NpmDependencyConstraint(
internal val project: Project,
private val name: String,
private val version: String,
val scope: NpmDependency.Scope = NpmDependency.Scope.NORMAL
private val path: String,
private val version: String
) : DependencyConstraintInternal {
private val moduleIdentifier = DefaultModuleIdentifier.newId(null, name);
private val versionConstraint = DefaultMutableVersionConstraint(version)
override fun getGroup(): String? = moduleIdentifier.group
override fun getGroup(): String? = null
override fun getName(): String = moduleIdentifier.name
override fun getName(): String = path
override fun getVersion(): String = versionConstraint.version
@@ -36,7 +33,11 @@ class NpmDependencyConstraint(
}
override fun getModule(): ModuleIdentifier {
return moduleIdentifier
return object : ModuleIdentifier {
override fun getGroup(): String? = null
override fun getName(): String = path
}
}
override fun getAttributes(): AttributeContainer {
@@ -60,10 +61,8 @@ class NpmDependencyConstraint(
}
override fun getVersionConstraint(): VersionConstraint {
println("get version constraint")
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
nodeJs.npmResolutionManager.requireConfiguringState()
.resolutions[name] = version
nodeJs.npmResolutionManager.putNpmResolution(path, version)
return versionConstraint
}
@@ -88,7 +88,6 @@ class YarnWorkspaces : YarnBasics() {
YarnImportedPackagesVersionResolver(rootProject, npmProjects, nodeJsWorldDir).resolveAndUpdatePackages()
rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces
println("resolutions $resolutions")
rootPackageJson.resolutions = resolutions
rootPackageJson.saveTo(
rootPackageJsonFile