Slackbot
04/26/2023, 3:38 PMAdam
04/26/2023, 3:38 PM--------------------------------------------------
Variant releaseApiElements
--------------------------------------------------
API elements for release
Capabilities
- app.cash.redwood:redwood-treehouse-host:0.3.0-SNAPSHOT (default capability)
Attributes
- com.android.build.api.attributes.AgpVersionAttr = 7.4.2
- com.android.build.api.attributes.BuildTypeAttr = release
- com.android.build.gradle.internal.attributes.VariantAttr = release
- org.gradle.category = library
- org.gradle.jvm.environment = android
- org.gradle.usage = java-api
- org.jetbrains.kotlin.platform.type = androidJvm
Secondary Variants (*)
--------------------------------------------------
Secondary Variant android-classes-jar
--------------------------------------------------
Attributes
- com.android.build.api.attributes.AgpVersionAttr = 7.4.2
- com.android.build.api.attributes.BuildTypeAttr = release
- com.android.build.gradle.internal.attributes.VariantAttr = release
- org.gradle.category = library
- org.gradle.jvm.environment = android
- org.gradle.usage = java-api
- org.jetbrains.kotlin.platform.type = androidJvm
Artifacts
- build/intermediates/compile_library_classes_jar/release/classes.jar (artifactType = android-classes-jar)
Adam
04/26/2023, 3:41 PMval dumpConfigurationContents by tasks.registering {
group = "help"
val configurationFiles = objects.mapProperty<String, FileCollection>()
val configurations = project.configurations
configurations
.matching { it.isCanBeResolved }
.all {
val contents = incoming
.artifactView { lenient(true) }
.artifacts
.artifactFiles
configurationFiles.put(name, contents)
}
doLast {
configurationFiles.get().forEach { (name, files) ->
println("-----------------------------------")
println(name)
println()
println(files.joinToString("\n") { " - ${it.name}" })
println()
println("-----------------------------------")
}
}
}
Thomas Broyer
04/26/2023, 3:55 PMgroup = "help"
line to the doLast
block.Adam
04/26/2023, 4:14 PMVampire
04/26/2023, 11:17 PMartifactType = android-classes-jar
, so
attributes {
attribute(ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE, "android-classes-jar")
}
Adam
04/27/2023, 7:06 AMwithVariantReselection()
!
and adding either of these (some sort of mysterious compatibility rule I guess?)
attribute(AndroidArtifacts.ARTIFACT_TYPE, AndroidArtifacts.ArtifactType.JAR.type)
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
It was really confusing because ./gradlew outgoingVariants
didn’t contain this attribute, and the Gradle docs don’t really explain secondary variants in a way that I understand.
val dumpConfigurationContents by tasks.registering {
group = "help"
val configurationFiles = objects.mapProperty<String, FileCollection>()
val configurations = project.configurations
configurations
.matching { it.isCanBeResolved }
.all {
val contents = incoming
.artifactView {
withVariantReselection()
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
}
lenient(true)
}
.artifacts
.artifactFiles
configurationFiles.put(name, contents)
}
doLast {
configurationFiles.get().forEach { (name, files) ->
println("-----------------------------------")
println(name)
println()
println(files.joinToString("\n") { " - ${it.name}" })
println()
println("-----------------------------------")
}
}
}
Vampire
04/27/2023, 7:47 AMVampire
04/27/2023, 7:48 AMAdam
04/27/2023, 7:50 AMThomas Broyer
04/27/2023, 7:54 AMTheattribute is special, since it is only present on resolved artifacts and not on dependencies. As a consequence, any transform which is only mutatingartifactType
will never be selected when resolving a configuration with only theartifactType
as requested attribute. It will only be considered when using an ArtifactView.artifactType
Adam
04/28/2023, 8:24 AM