“app” depends on sub-projects of “frameworks” and “libs"
Sub-projects of “frameworks” depends on sub-projects of “libs” and even sub-projects of “libs” depends on sub-projects of 'libs”
So it is a very big plate of spaghettis
Eventually everything works as expected, Buildship does a very good job on dependency substitution. All my projects get linked to each other.
Except that when I hit “Refresh Gradle Project”, it takes for ever, especially dependy resolution which seems to be done from scratch everytime (and on every project ?). When I just launch some gradle commands on ad_hoc project with command line, it is quite faster (10 seconds compared to 3 minutes at least)
Did I miss something ? Also what could explain the differences between Buildship and CommandLine ?
It shouldn’t take that long. Is there any chance you can reproduce the slowdown with some dummy projects that you could share? Otherwise you can attach one of the common profilers (JFR, JProfiler, YourKit) to the daemon (or to Eclipse, depending on where the time is spent) and send us a performance snapshot for analysis.
On your Windows machine, do you have a virus scanner that might be watching your temp directory? Because as far as I can see only the access to your temp dir is slow.
The overhead in general should be lower with Gradle 4.5.
Beyond that most of the time is spent in the Spring dependency management plugin. In Gradle 4.5 we actually added experimental BOM support to Gradle itself, so you could try replacing the Spring plugin with that feature. You can try it out like this:
Add gradle.experimentalFeatures.enable() to your settings.gradle
Instead of using dependencyManagement, just add the BOM as a normal dependency, e.g. implementation 'com.mycompany:mybom:1.2'
I was supecting the virus scanner but I didn’t think of the temp directory. It really improves performance (but it is still good)
I tried boms in gradle 4.5, it’s “working” (I can’t launch my project in Eclipse but it’s not gradle fault I think; it’s a very legacy project and even minor changes can break it). The boms management does not seem to support “properties” like for version parametrization as in spring plugin. Do you plan to support it ?
There is no plan to support properties in BOMs at this point. It would be interesting to see when that is useful. At first glance it seems to water down the contract defined by the BOM.
Feel free to attach a snapshot using Gradle 4.5 (with the spring plugin or with the experimental BOM support). I’ll take another look then.