A few days ago I was having trouble building an Unreal project for my Quest 2 so I located and downloaded the OculusInputTest sample and got that to build, deploy and run on my Quest 2. After much struggle I was still unable to figure out how to create my own project that would deploy and run on my Quest. I tried installing different versions of JDK and Java and still couldn’t get it to work. Now I am not even able to get the OculusInputTest to build any more. I am hitting the error:
Querying the mapped value of map(java.io.File property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, Z:\downloader_library\build\generated\ap_generated_sources\debug\out)) org.gradle.api.internal.file.DefaultFilePropertyFactory$ToFileTransformer@16ce4f9a) before task ‘:downloader_library:compileDebugJavaWithJavac’ has completed is not supported
More details are at:
Edit - may be related to
opened 12:16PM - 11 Apr 21 UTC
closed 10:41PM - 05 Sep 23 UTC
in:publishing-plugins
a:bug
in:configuration-model
### Expected Behavior
It should be possible to add lazy tasks as an artifact
…
### Current Behavior
6.8.3 produces a warning, and 7.0 fails the build.
CI failure: https://github.com/vlsi/gradle-issue-reproducers/pull/5/checks?check_run_id=2317062953#step:4:227
`/build.gradle.kts`:
```kotlin
plugins {
`java-library`
}
val zips by configurations.creating {
isCanBeResolved = true
isCanBeConsumed = false
}
dependencies {
zips(project(":dist", "zips"))
}
val printDistFiles by tasks.registering {
inputs.files(zips)
doLast {
val names = zips.map { it.name }.sorted()
val expected = listOf("buildZip.zip", "buildZip.zip.sha512")
require(names == expected) {
"expected: $expected, got: $names"
}
}
}
```
`/dist/build.gradle.kts`:
```kotlin
plugins {
`java-library`
}
val zips by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
}
dependencies {
// This dependency breaks :dist:test task
implementation(project(":"))
}
// Here we generate a zip file along with its checksum and share it via zips configuration with the root project
val buildZip by tasks.registering(Zip::class) {
archiveBaseName.set("buildZip")
archiveVersion.set("")
from("build.gradle.kts")
}
artifacts {
add(zips.name, buildZip)
}
val archiveFile = buildZip.flatMap { it.archiveFile }
val sha512File = archiveFile.map { File(it.asFile.absolutePath + ".sha512") }
val shaTask = project.tasks.register(buildZip.name + "Sha512") {
onlyIf { archiveFile.get().asFile.exists() }
inputs.file(archiveFile)
outputs.file(sha512File)
doLast {
ant.withGroovyBuilder {
"checksum"(
"file" to archiveFile.get(),
"algorithm" to "SHA-512",
"fileext" to ".sha512",
// Make the files verifiable with shasum -c *.sha512
"format" to "MD5SUM"
)
}
}
}
artifacts {
// https://github.com/gradle/gradle/issues/10960
add(zips.name, sha512File) {
type = "sha512"
builtBy(shaTask)
}
}
project.tasks.named(BasePlugin.ASSEMBLE_TASK_NAME) {
dependsOn(shaTask)
}
```
Run command: `./gradlew :printDistFiles`
```
Caused by: org.gradle.api.InvalidUserCodeException: Querying the mapped value of flatmap(provider(task 'buildZip', class org.gradle.api.tasks.bundling.Zip)) before task ':dist:buildZip' has completed is not supported
at org.gradle.api.internal.provider.TransformBackedProvider.lambda$beforeRead$0(TransformBackedProvider.java:84)
at org.gradle.api.internal.provider.ValueSupplier$TaskProducer.visitContentProducerTasks(ValueSupplier.java:136)
at org.gradle.api.internal.provider.TransformBackedProvider.beforeRead(TransformBackedProvider.java:81)
at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:63)
at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:84)
at org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact.getDelegate(LazyPublishArtifact.java:94)
at org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact.getName(LazyPublishArtifact.java:64)
at org.gradle.util.GUtil.getOrDefault(GUtil.java:167)
at org.gradle.api.internal.artifacts.publish.DecoratingPublishArtifact.getName(DecoratingPublishArtifact.java:51)
at org.gradle.api.internal.artifacts.publish.DecoratingPublishArtifact_Decorated.getName(Unknown Source)
at org.gradle.internal.component.model.DefaultIvyArtifactName.forPublishArtifact(DefaultIvyArtifactName.java:36)
at org.gradle.internal.component.local.model.PublishArtifactLocalArtifactMetadata.<init>(PublishArtifactLocalArtifactMetadata.java:40)
at org.gradle.internal.component.local.model.DefaultLocalComponentMetadata.addArtifacts(DefaultLocalComponentMetadata.java:147)
at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.DefaultLocalComponentMetadataBuilder$1.visitArtifacts(DefaultLocalComponentMetadataBuilder.java:56)
at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationPublications.collectVariants(DefaultConfigurationPublications.java:88)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.collectVariants(DefaultConfiguration.java:1052)
at org.gradle.api.internal.artifacts.ivyservice.moduleconverter.DefaultLocalComponentMetadataBuilder.addConfiguration(DefaultLocalComponentMetadataBuilder.java:53)
at org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectLocalComponentProvider.getLocalComponentMetadata(DefaultProjectLocalComponentProvider.java:103)
at org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectLocalComponentProvider.lambda$getLocalComponentMetadata$0(DefaultProjectLocalComponentProvider.java:90)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:267)
at org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectLocalComponentProvider.getLocalComponentMetadata(DefaultProjectLocalComponentProvider.java:87)
at org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectLocalComponentProvider.getComponent(DefaultProjectLocalComponentProvider.java:73)
at org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultLocalComponentRegistry.getComponent(DefaultLocalComponentRegistry.java:34)
at org.gradle.api.internal.artifacts.DefaultComponentSelectorConverter.getSelector(DefaultComponentSelectorConverter.java:59)
at org.gradle.api.internal.artifacts.DefaultComponentSelectorConverter.getModule(DefaultComponentSelectorConverter.java:47)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyState.getModuleIdentifier(DependencyState.java:80)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DefaultPendingDependenciesVisitor.maybeAddAsPendingDependency(DefaultPendingDependenciesVisitor.java:35)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitDependencies(NodeState.java:438)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:284)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:194)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:148)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:145)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveBuildDependencies(DefaultConfigurationResolver.java:136)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveBuildDependencies(ShortCircuitEmptyConfigurationResolver.java:76)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveBuildDependencies(ErrorHandlingConfigurationResolver.java:63)
```
### Context
The pattern is used in Apache JMeter build.
"core, plugins" projects produce jar files via regular java-library
"dist" project aggregates all the projects and builds distzip
"license" project takes "dist.runtimeElements" and builds a license file for the third-party dependencies
"dist" project includes the license file into the distribution as well.
The thing almost works in Gradle 7, however, lazy artifacts defeat it :(
I am not sure if this issue is significantly different from https://github.com/gradle/gradle/issues/14236, however, now I have a standalone reproducer.
### Steps to Reproduce
Here's a reproducer: https://github.com/vlsi/gradle-issue-reproducers/pull/5
The structure there is:
`:dist` project produces a `buildZip.zip` into `zips` configuration.
`:dist` project computes SHA512 for `buildZip.zip` and attaches it to `zips` configuration as well.
The root project consumes `:dist:zips` configuration and prints the resulting files.
### Your Environment
Build scan URL for Gradle 6.8.3: https://gradle.com/s/b6cfwbznrq3js
Build scan URL for Gradle 7.0: https://scans.gradle.com/s/4qgffhiqup472