Hello Maven experts, having started to make a big legacy enterprise Java project (which previously used Jenkins) ready to build through GitLab CI/CD, I ran into the exact same problems as described here with regards to an obvious misfit between the concepts of GitLab Runner CI/CD and Maven:
https://gitlab.com/gitlab-org/gitlab/-/issues/234078 __________ The issue here is related to how both Maven and Git work. Here's a little bit of context: · Git doesn't store timestamps, this means that every file resulting from a git clone operation will have the current timestamp · Maven checks files in the target/source-classes directory and compares them with files in src to understand if they need to be compiled again, and it uses the timestamp to determine if the source code is newer than the built one · GitLab CI jobs do a git clone to retrieve the repository, meaning that all the files in the working dir have the current timestamp · GitLab CI jobs store folder artifacts as a zip file and those files are unzipped in following jobs, causing the artifacts to have as timestamp the moment where they were created in the previous job If considering the Maven scenario, this means that files in target/source-classes will look older than the files in src, triggering a full build instead of using the already built classes. Why does this matter? Let's say we have a pipeline where the first step is to build our project and then we have multiple steps that execute other goals like unit tests, code quality and so on, with the current behavior Maven will fully rebuild the project in every job of our pipeline. From our point of view, this is a big issue because it prevents us to share build artifacts between jobs. _________ Also, the fact that during the run of one pipeline, every single stage does a fresh Git checkout and a fresh Maven generate-sources and compile (including tests), is clearly completely suboptimal in terms of “Green IT” and a true waste of compute and I/O resources as well as time… ☹ Is there any established strategy in the Maven community on how to set up continuous builds/deployments using GitLab CI/CD? Or are we still – 5 years after the above issue has been opened with GitLab – lacking a “standard” solution here? Many thanks in advance for your kind help & best regards Andreas -- Andreas Loew externe Fachkraft im Auftrag der Wavestone Germany AG Leopoldstraße 28a, D-80802 München im Auftrag der DB Energie GmbH (I.EFN 2) Im Galluspark 25, D-60326 Frankfurt am Main E-Mail: andreas.a.loew-ext...@deutschebahn.com<mailto:andreas.a.loew-ext...@deutschebahn.com> ________________________________ Pflichtangaben anzeigen<https://www.deutschebahn.com/pflichtangaben/20250625> Nähere Informationen zur Datenverarbeitung im DB-Konzern finden Sie hier: https://www.deutschebahn.com/de/konzern/datenschutz