Applying BuildScript Classpath to Gradle Convention Plugin
Hello developers!
I need some programming advice and I hope that I am not off-topic. I couldn't find a more relevant group in Lemmy.
I have a Gradle convention plugin (written in Kotlin) that needs a buildscript classpath. But I can't get it to resolve correctly in the project.
If I add the buildscript classpath to the convention plugin and then apply the plugin to the project, it throws an error saying that buildscript is not allowed and the plugins section should be used instead.
If I add the buildscript classpath to the project itself (although this doesn't feel right because the convention plugin should be already compiled), then it throws an error saying that the dependencies are not met (classpath not applied).
I'm not sure what you mean with "needs a buildscript classpath". Are you trying to use a dependency in your convention plugin? If so you should add it to build.gradle in the buildSrc directory.
An example of what you are trying to do would help a lot.
Instead of applying it directly to the project, I want to add all this config to a convention plugin and add that to the project. Hoping to reuse the config across many projects.
I threw this together really quick: https://github.com/foip/jib-convention-test .
The crux is adding the jib plugin and the extension to buildSrc/build.gradle.kts.
I don't know if this matches your project setup, so let me know if this does or doesn't work for you (:
Edit:
To put the answer to the original question in more general terms for anyone who stumbles upon this thread:
In this case the jib-gradle-plugin is applied as a plugin in the root build.gradle.kts, but it needs extra runtime dependencies for its extensions. You normally would declare those dependencies like so:
When you want to write a convention plugin to wrap that configuration, basically everything that went inside that buildscript block now goes into buildSrc/build.gradle.kts:
That goes for other dependencies as well, for example if you want to use a library to write a custom task, and then you refactor that task into a plugin inbuildSrc.