with mvn jdk for application maven docker dependencies dockerfile

maven - mvn - java docker application



Dependencias Caching Jar para compilaciones Docker basadas en Maven (2)

Hay una nueva instrucción sobre este tema: https://github.com/carlossg/docker-maven#packaging-a-local-repository-with-the-image

El directorio $ MAVEN_CONFIG (predeterminado en /root/.m2) se configura como un volumen para que todo lo copiado allí en un archivo Docker en tiempo de compilación se pierda. Para eso se crea dir / usr / share / maven / ref /, y todo lo que allí se copiará en el inicio del contenedor a $ MAVEN_CONFIG.

Para crear un repositorio preempaquetado, cree un pom.xml con las dependencias que necesita y use esto en su archivo Docker. /usr/share/maven/ref/settings-docker.xml es un archivo de configuración que cambia el repositorio local a / usr / share / maven / ref / repository, pero puede usar su propio archivo de configuración siempre que use / usr / share / maven / ref / repository como repos local.

Estoy construyendo una imagen Docker de este Dockerfile:

FROM maven:3.3.3-jdk-8 MAINTAINER Mickael BARON ADD pom.xml /work/pom.xml WORKDIR /work RUN mvn dependency:go-offline --fail-never ADD ["src", "/work/src"] RUN ["mvn", "package"]

Con este Dockerfile, obligo a descargar las dependencias antes de empacar mi proyecto Java. Por lo tanto, no tengo que volver a descargar las dependencias cada vez que cambié un archivo de mi directorio src.

Pero, hay un problema y este problema depende de la versión de Maven (imagen base). De hecho, las dependencias se descargan pero no se conservan en el directorio ~ / .m2 del contenedor. Esta vacio. Por lo tanto, cuando cambio algún archivo fuente, todas las dependencias se vuelven a descargar.

Sin embargo, noté que si cambio la versión de Maven de la imagen base (por ejemplo FROM maven:3.2.5-jdk-8 ), funciona.

Muy extraño, ¿no?