Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing error location being reported with convention plugin #28677

Open
bric3 opened this issue Apr 3, 2024 · 1 comment
Open

Missing error location being reported with convention plugin #28677

bric3 opened this issue Apr 3, 2024 · 1 comment
Labels
a:bug in:precompiled-script-plugin re:comprehensibility reasonable errors and warnings, clear dsl, mental overload

Comments

@bric3
Copy link
Contributor

bric3 commented Apr 3, 2024

Current Behavior

When an error happens in a convention plugin, the error location is not correct, e.g.

* What went wrong:	
An exception occurred applying plugin request [id: 'fireplace.published-java-library']	
> Failed to apply plugin 'fireplace.maven-publication'.	
   > Cannot query the value of this provider because it has no value available.

But when running with --stacktrace we can see the origin of the code

org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'fireplace.published-java-library']
	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:179)
	... edited for brevity
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'fireplace.maven-publication'.
	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:176)
	at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:148)
	at org.gradle.kotlin.dsl.precompile.v1.PrecompiledProjectScript$plugins$1.id(PrecompiledScriptTemplates.kt:175)
	at Fireplace_published_java_library_gradle$1.invoke(fireplace.published-java-library.gradle.kts:12)
	at Fireplace_published_java_library_gradle$1.invoke(fireplace.published-java-library.gradle.kts:10)
	at org.gradle.kotlin.dsl.precompile.v1.PrecompiledProjectScript.plugins(PrecompiledScriptTemplates.kt:172)
	at Fireplace_published_java_library_gradle.<init>(fireplace.published-java-library.gradle.kts:10)
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at Fireplace_publishedJavaLibraryPlugin.apply(Fireplace_publishedJavaLibraryPlugin.kt:13)
	at Fireplace_publishedJavaLibraryPlugin.apply(Fireplace_publishedJavaLibraryPlugin.kt:6)
	at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
	... edited for brevity
Caused by: org.gradle.api.internal.provider.MissingValueException: Cannot query the value of this provider because it has no value available.
	at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateOwnPresentValue(AbstractMinimalProvider.java:82)
	at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:100)
	at Fireplace_maven_publication_gradle$2$2$2$1.execute(fireplace.maven-publication.gradle.kts:83)   <------ this is where it happens
	at Fireplace_maven_publication_gradle$2$2$2$1.execute(fireplace.maven-publication.gradle.kts:82)
	at org.gradle.api.internal.artifacts.repositories.AuthenticationSupporter.credentials(AuthenticationSupporter.java:84)
	at org.gradle.api.internal.artifacts.repositories.AuthenticationSupporter.credentials(AuthenticationSupporter.java:80)
	at org.gradle.api.internal.artifacts.repositories.AbstractAuthenticationSupportedRepository.credentials(AbstractAuthenticationSupportedRepository.java:75)
	at Fireplace_maven_publication_gradle$2$2$2.execute(fireplace.maven-publication.gradle.kts:82)
	at Fireplace_maven_publication_gradle$2$2$2.execute(fireplace.maven-publication.gradle.kts:79)
	at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:88)
	at org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.maven(DefaultRepositoryHandler.java:161)
	at Fireplace_maven_publication_gradle$2$2.execute(fireplace.maven-publication.gradle.kts:79)
	at Fireplace_maven_publication_gradle$2$2.execute(fireplace.maven-publication.gradle.kts:58)
	at org.gradle.api.publish.internal.DefaultPublishingExtension.repositories(DefaultPublishingExtension.java:40)
	at Fireplace_maven_publication_gradle$2.execute(fireplace.maven-publication.gradle.kts:58)
	at Fireplace_maven_publication_gradle$2.execute(fireplace.maven-publication.gradle.kts:17)
	at org.gradle.internal.extensibility.ExtensionsStorage$ExtensionHolder.configure(ExtensionsStorage.java:177)
	at org.gradle.internal.extensibility.ExtensionsStorage.configureExtension(ExtensionsStorage.java:64)
	at org.gradle.internal.extensibility.DefaultConvention.configure(DefaultConvention.java:207)
	at gradle.kotlin.dsl.accessors._76a779107637b25b34866585d88a55c4.Accessorscchdiujech8u294vwhihsq7ghKt.publishing(Accessorscchdiujech8u294vwhihsq7gh.kt:73)
	at Fireplace_maven_publication_gradle.<init>(fireplace.maven-publication.gradle.kts:17)
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
	at Fireplace_mavenPublicationPlugin.apply(Fireplace_mavenPublicationPlugin.kt:13)
	at Fireplace_mavenPublicationPlugin.apply(Fireplace_mavenPublicationPlugin.kt:6)
	at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
	... edited for brevity

This stack has 3 main parts

  1. the exception reporting, complaining about InvalidPluginException, this is pure gradle

  2. a PluginApplicationException cause about applying fireplace.maven-publication, the frames reveal it's happening within fireplace.published-java-library.gradle.kts

    • at Fireplace_published_java_library_gradle$1.invoke(fireplace.published-java-library.gradle.kts:12)
  3. the original cause, which happens to be MissingValueException: Cannot query the value of this provider because it has no value available., we see in the frames this is happening within fireplace.maven-publication.gradle.kts.

    • at Fireplace_maven_publication_gradle$2$2$2$1.execute(fireplace.maven-publication.gradle.kts:83)

Expected Behavior

The error message should have been something like

* What went wrong:	
An exception occurred applying plugin request [id: 'fireplace.published-java-library']	
> fireplace.published-java-library.gradle.kts:12: Failed to apply plugin 'fireplace.maven-publication'.	
   > fireplace.maven-publication.gradle.kts:83: MissingValueException: Cannot query the value of this provider because it has no value available. 

Note I'm mentioning the source from the last executed frames where the user code is executed. Not sure this is feasible but this definitely look more practical to have this information.

Also I added the exception name, as I think this is in general useful, (maybe not in this case, as the message and exception name carry the same info)

Context (optional)

The project when the issue happened was at this revision

https://github.com/bric3/fireplace/tree/38cc9dff521ce58837b8c93a54ff9b10f4bedfa1

Convention plugin are there

build-logic/src/main/kotlin
├── Utils.kt
├── fireplace.application.gradle.kts
├── fireplace.java-library.gradle.kts
├── fireplace.licence-report.gradle.kts
├── fireplace.local-eclipse-swt-platform.gradle.kts
├── fireplace.maven-publication.gradle.kts
├── fireplace.published-java-library.gradle.kts
└── fireplace.tests.gradle.kts
  • fireplace.published-java-library.gradle.kts applies fireplace.maven-publication.gradle.kts.
  • some project applies fireplace.published-java-library.gradle.kts

Steps to Reproduce

This happened in a specific revision and during release

https://github.com/bric3/fireplace/tree/38cc9dff521ce58837b8c93a54ff9b10f4bedfa1

But I believe something similar can be created with a convention plugin that applies another convention plugin.

Gradle version

8.7

Build scan URL (optional)

https://scans.gradle.com/s/oncepoqa3np46/console-log?anchor=284&page=1

Your Environment (optional)

It was a github runner (ubuntu latest).

@ov7a
Copy link
Member

ov7a commented Apr 4, 2024

The issue is in the backlog of the relevant team and is prioritized by them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a:bug in:precompiled-script-plugin re:comprehensibility reasonable errors and warnings, clear dsl, mental overload
Projects
None yet
Development

No branches or pull requests

2 participants