Assume we have this project structure:
depends-on > InPlaceA --depends-on-> InPlaceB
These dependencies are specified in the buildConfig.groovy file in the standard way.
When all is set up correctly, Project will have project references both to InPlaceA and InPlaceB. This is the grails way of doing things. One plugins dependencies are passed on and become dependencies for the consuming plugin.
Now, let's say that the buildConfig.groovy file for InPlaceA is edited and its dependency on InPlaceB is removed. Refresh dependencies is run on InPlaceA. As expected, the project dependency on InPlaceB is removed.
However, Project incorrectly still has a project dependency on InPlaceB. And it will remain there until a Refresh Dependencies is run on Project itself.
There are 2 potential solutions I can think of:
1. Whenever a refresh dependencies is run on an in place plugin, also run refresh dependencies on downstream dependant projects. Problem is that this will potentially take a long time.
2. Do not explicitly include transitive project dependencies for in place plugins. Rather, ensure that project dependencies are exported from In place plugins so that other projects downstream implicitly get the dependency without needing to mark it in the .classpath. The problem here is distinguishing between direct In place dependencies and transitive in place dependencies.