Hej,
I am using Gradle 6.5.1 on a single java project.
A clean compilation of the test folder for this project takes about 8 minutes.
If I change a single test class that is not used by other test classes Gradle starts compiling again the whole test folder and it takes again 8 minutes.
My expectation is that Gradle would only need to compile this file and not the whole folder.
I tried compiling with and without build-cache and I don’t see any difference in the behaviour.
All the previous tasks are marked as up-to-date by Gradle.
Here is the info output of Gradle.
....
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
:classes (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs.
:compileTestJava (Thread[Execution worker for ':',5,main]) started.
Task :compileTestJava
Cache entries evicted. In-memory cache of ....gradle/caches/journal-1/file-access.bin: Size{400} MaxSize{400}, CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadExceptionCount=0, totalLoadTime=0, evictionCount=521}
Performance may suffer from in-memory cache misses. Increase max heap size of Gradle build process to reduce cache misses.
Excluding []
Excluding []
Custom actions are attached to task ':compileTestJava'.
Build cache key for task ':compileTestJava' is c5d9263873a9750b37aef521e4d0b615
Task ':compileTestJava' is not up-to-date because:
Input property 'stableSources' file <the class name of the changed file>.java has changed.
Created classpath snapshot for incremental compilation in 0.015 secs. 640 duplicate classes found in classpath (see all with --debug).
Class dependency analysis for incremental compilation took 0.03 secs.
Compiling with JDK Java compiler API.
There is this line Performance may suffer from in-memory cache...
and I tried to compile with GRADLE_OPTS=-Xmx1G
and GRADLE_OPTS=-Xmx512m
. I also checked that the daemons have applied the memory settings via ps ax | grep gradle
. But it makes no difference and the same message was coming up with these settings. It always says MaxSize{400}
.
- Is my expectation right that the change to this one file only would not need a full recompile of the test folder?
- Is this message about max heap changing relevant and how can I avoid his message?
- How can I speed up the compile time for one changed test class?
Because in a scenario where I would like to run certain tests on a change with-t
it takes now 8 minutes after every change.
Thanks for any help in advance.
Update:
In the debug out I found this message:
Full recompilation is required because the chosen compiler did not support incremental annotation processing
We use Lombok in version 1.18.12 which should support incremental compilation according to the docs.
Is this message about Lombok or the java compiler?
Update 2:
But the message from above is not consistent. After another change to the same file, I could not get the message from my first update. But I get
[org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler] Incremental compilation of 2 classes completed in 6 mins 38.689 secs.
[org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler] Recompiled classes [<class 1>, <class 2>]
And it seems it will incremental compile but takes again so long as it would compile the full test source folder.