如何在开发环境中使用maven-docker以避免重复下载jar?

这是我的Dockerfile,但是如果我改了java代码,然后input“docker-compose up -d –build”到terminal,maven会重新下载jar,如何避免重复下载?

Dockerfile:

FROM maven:3.5.0-jdk-8 WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn verify ENTRYPOINT ["java","-jar","target/cloud-user.jar"] 

泊坞窗,compose.yml:

 version: "2" services: cloud-nginx: build: cloud-nginx image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-nginx restart: always ports: ["80:80"] cloud-consul: image: consul:0.9.2 command: consul agent -dev -client 0.0.0.0 cloud-front: build: cloud-front image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-front restart: always volumes: - ./cloud-front/static:/app cloud-user: build: cloud-user image: registry.cn-beijing.aliyuncs.com/wangdali/cloud-user restart: always mysql: image: mysql:5.7.19 hostname: mysql volumes: - ./docker/mysql/data:/var/lib/mysql - ./docker/mysql/conf:/etc/mysql/conf.d - /etc/localtime:/etc/localtime ulimits: nproc: 65535 mem_limit: 1024m restart: always environment: MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" 

我简化了我的testing项目,然后使用maven的spring-boot插件

mvn spring-boot:运行

启动项目,现在先挂载.m2文件夹,然后运行mvn命令。 但是当我更改了java源代码后,它不会自动加载devtools,怎么解决?

这是我的Dockerfile / docker-compose.yml:

Dockerfile:

 version: "2" services: user: build: user volumes: - $HOME/.m2/repository:/root/.m2/repository - ./user/src:/app/src ports: - "8080:8080" 

泊坞窗,compose.yml:

 FROM maven:3.5.0-jdk-8 WORKDIR /app COPY pom.xml . COPY src ./src ENTRYPOINT ["mvn","spring-boot:run"] 

解决了,我将目标文件夹挂载到容器,它可以自动加载,这是最终的dockerfile和docker-compose.yml,当然在生产环境中我们不能写:

Dockerfile:

 FROM maven:3.5.0-jdk-8 WORKDIR /app COPY pom.xml . COPY src ./src ENTRYPOINT ["mvn","spring-boot:run"] 

泊坞窗,compose.yml

 version: "2" services: user: build: user volumes: - $HOME/.m2/repository:/root/.m2/repository - ./user/target:/app/target ports: - "8080:8080" - "5005:5005" 

pom.xml中:

  <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>cn.codeforfun.Application</mainClass> <jvmArguments>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments> </configuration> </plugin> </plugins>