I read the user guide section on transforming dependency artifacts on resolution which I’m trying to better understand by creating a build.gradle file that essentially does what the cpp-application and cpp-library plugins do when resolving the zipped header files that are published as part of those packages. However, Gradle is failing to resolve the configuration and isn’t triggering the transform. I created a simple cpp-library application and published it to my local Maven repository (sandbox:mathLib:1.0.0) which is what I’m trying to resolve.
Here’s my build.gradle file:
repositories {
mavenLocal()
}
def artifactType = Attribute.of('artifactType', String)
configurations {
mathHeaders {
canBeConsumed = false
canBeResolved = true
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.C_PLUS_PLUS_API))
attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
}
}
}
abstract class UnzipTransform implements TransformAction<Parameters> {
interface Parameters extends TransformParameters {}
@InputArtifact
abstract Provider<FileSystemLocation> getZipFile()
@Override
void transform(TransformOutputs outputs) {
copy {
from zipTree(zipFile)
into outputs.dir(zipFile.name)
}
}
}
dependencies {
registerTransform(UnzipTransform) {
from.attribute(artifactType, ArtifactTypeDefinition.ZIP_TYPE)
to.attribute(artifactType, ArtifactTypeDefinition.DIRECTORY_TYPE)
}
mathHeaders 'sandbox:mathLib:1.0.0'
}
tasks.register('printHeaders') {
doLast {
println configurations.mathHeaders.singleFile
}
}
And this is the output on execution. It seems as though the transform should be triggered on the first variant:
$ gradle printHeaders
> Task :printHeaders FAILED
FAILURE: Build failed with an exception.
* Where:
Build file 'build.gradle' line: 47
* What went wrong:
Execution failed for task ':printHeaders'.
> Could not resolve all files for configuration ':mathHeaders'.
> Could not resolve sandbox:mathLib:1.0.0.
Required by:
project :
> Unable to find a matching variant of sandbox:mathLib:1.0.0:
- Variant 'api' capability sandbox:mathLib:1.0.0:
- Incompatible attribute:
- Required artifactType 'directory' and found incompatible value 'zip'.
- Other attributes:
- Found org.gradle.status 'release' but wasn't required.
- Required org.gradle.usage 'cplusplus-api' and found compatible value 'cplusplus-api'.
- Variant 'debugLink' capability sandbox:mathLib:1.0.0:
- Incompatible attribute:
- Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-link'.
- Other attributes:
- Required artifactType 'directory' but no value provided.
- Found org.gradle.native.architecture 'x86-64' but wasn't required.
- Found org.gradle.native.debuggable 'true' but wasn't required.
- Found org.gradle.native.linkage 'SHARED' but wasn't required.
- Found org.gradle.native.operatingSystem 'linux' but wasn't required.
- Found org.gradle.native.optimized 'false' but wasn't required.
- Found org.gradle.status 'release' but wasn't required.
- Variant 'debugRuntime' capability sandbox:mathLib:1.0.0:
- Incompatible attribute:
- Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-runtime'.
- Other attributes:
- Required artifactType 'directory' but no value provided.
- Found org.gradle.native.architecture 'x86-64' but wasn't required.
- Found org.gradle.native.debuggable 'true' but wasn't required.
- Found org.gradle.native.linkage 'SHARED' but wasn't required.
- Found org.gradle.native.operatingSystem 'linux' but wasn't required.
- Found org.gradle.native.optimized 'false' but wasn't required.
- Found org.gradle.status 'release' but wasn't required.
- Variant 'releaseLink' capability sandbox:mathLib:1.0.0:
- Incompatible attribute:
- Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-link'.
- Other attributes:
- Required artifactType 'directory' but no value provided.
- Found org.gradle.native.architecture 'x86-64' but wasn't required.
- Found org.gradle.native.debuggable 'true' but wasn't required.
- Found org.gradle.native.linkage 'SHARED' but wasn't required.
- Found org.gradle.native.operatingSystem 'linux' but wasn't required.
- Found org.gradle.native.optimized 'true' but wasn't required.
- Found org.gradle.status 'release' but wasn't required.
- Variant 'releaseRuntime' capability sandbox:mathLib:1.0.0:
- Incompatible attribute:
- Required org.gradle.usage 'cplusplus-api' and found incompatible value 'native-runtime'.
- Other attributes:
- Required artifactType 'directory' but no value provided.
- Found org.gradle.native.architecture 'x86-64' but wasn't required.
- Found org.gradle.native.debuggable 'true' but wasn't required.
- Found org.gradle.native.linkage 'SHARED' but wasn't required.
- Found org.gradle.native.operatingSystem 'linux' but wasn't required.
- Found org.gradle.native.optimized 'true' but wasn't required.
- Found org.gradle.status 'release' but wasn't required.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
1 actionable task: 1 executed
Can anyone help me understand why the transform is not being triggered?