In my experience, let’s say your Gradle project has sub-projects: A, B, C, One, Two. Among them, A, B, and C are modules, and One and Two are two plugins. It has the following relationships:
pluginModule(dependency) : When Build Plugin One, the classes in A and B are merged into Plugin One (jar).
When Build Plugin Two, the classes in B and C are merged into Plugin Two.
localPlugin/plugins/bundledPlugins: compile time or runtime dependency. you build Plugin Two will need Plugin One. And User install Plugin Two may request to install Plugin One too.