How does a composite build ensure that one included build is built before another?

There’s nothing special there, it just turns external dependencies into project dependencies. If that plugin doesn’t work with composites there’s a high likelyhood it also won’t work with a normal multi-project build. It may have some undeclared dependencies.

Edit: Yep, it seems to completely erase dependency information by turning dependencies into Strings, which Gradle won’t understand. Also it resolves all dependencies at configuration time, which is wrong and will slow down builds and lead to ordering conflicts.

The maintainer should have a look at CommandLineArgumentProvider, which allows you to derive command line arguments from rich objects with proper input annotations. Specifically, the original classpath and the chainsaw plugin’s patching configuration need to be inputs to the task for it to be correct.

1 Like