Hello Maven people, Can someone at least give me some feedback on why this one is not getting any answers? Asked the question in a wrong way? Is it not clear? Not interesting?
I think supporting Docker-based builds is very important today. I'm thinking of contributing code to solve this issue, but I first want to confirm I didn't miss some solution that is already available. Adam On Sun, Feb 4, 2018 at 12:57 PM, Adam Sandor <adam.san...@container-solutions.com> wrote: > I’m trying to figure out how to create a two-stage Docker build using Maven > that would properly utilise Docker layer caching. Containing the whole build > in a Docker container without external dependencies on volume mounts (for > .m2 cache) has a lot of advantages. > The only missing piece of the puzzle I can’t figure out is how to force > Maven to download ALL dependencies just by using the pom file and not > executing any compilation. The idea behind is to: > 1. copy the pom file into the image > 2. use maven to download all dependencies > 3. copy the sources to the image > 4. use maven to build the final artifact > This way Docker will reuse the layer containing the dependencies if the pom > file didn’t change. So dependency caching would be implemented in a > Docker-ish way that works anywhere the Docker daemon is present as opposed > to relying on Maven being installed and artifacts getting stored in a shared > .m2/repository directory. > > Now the problem - Maven’s lazy downloading of dependencies. Even if I try to > execute “mvn dependency:go-offline” Maven still doesn’t download plugins and > other dependencies, which would only be required during the packaging phase. > So the following Docker file doesn’t work as intended: > > FROM maven AS build > WORKDIR /build > ADD pom.xml /build > RUN mvn dependency:go-offline > ADD src /build/src > RUN mvn -o package > FROM openjdk:8-jdk > WORKDIR /app > COPY --from=build /build/target/app.jar /app > CMD java -jar /app/app.jar > > Maven will still start downloading more dependencies on line 6. > > I found a workaround for this - execute “mvn package” with a single fake > main class on line 4, but this is not a nice solution. Can anyone give me > some option I’m missing or confirm that this is the way things are? In that > case I can go ahead write a blog post showing my workaround to help other > struggling with the same problem. Thank you! > > Adam Sandor from Container Solutions > > > -- > > Ádám Sándor > > Senior Engineer / Consultant > > Container Solutions > > 0680126174 --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org