I didn’t include anything.
Didn’t mean to blame you for anything, just explaining the situation.
Gradle is doing all of this!
Not “all”. The “conductor” was done by you and is the “culprit”, as it depends on a root project task of a build that does not exist.
And in the state it is presented, it doesn’t work with composite builds (without adding superfluous files).
It works perfectly fine with composite builds.
The problem are not composite builds.
If you for example depend on the lib in there by coordinates, it works exactly like designed.
The only problem is, that it does not match your expectations in “conductor”, that all your included builds have the tasks clean
and assemble
in their root project.
That’s what he said
Yes, and it does just work properly as designed.
Again, it just does not meet your expectations in “conductor”.
Again, I don’t want to blame anyone.
I just try to explain you why it works (or not works) like it is and where the problem is in your MCVE that makes it not work, and that the “work-around” you did, does not do what you expect it to do.
is there any read-up or how-to which makes this less repetitive?
Not sure what you mean.
As explained above, duplicating the plugins you apply in :libraries:lib
within :libraries
will make the tasks you expect from conductor to be available, but it will not do what you expect, as you only call the tasks from the root project, unless you then wire down from the root project to the subproject too.
To be less repetetive, just don’t use a subproject, but directly the root project as already concluded above?
Generally spoken, so avoid repetition in build logic, you should use convention plugins, for example implemented as precompiled script plugins, that you then apply where you want their effect to be present and that then applies the conventions you want to have.