maven

maven #

docker run #

maven配置文件 #

./maven/settings.xml (主要用于配置镜像仓库地址)

xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/usr/share/maven/ref/repository</localRepository>
  <mirrors>
    <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Aliyun Maven Repository</name>
      <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
      </mirror>
  </mirrors>
</settings>

bash脚本 #

编译maven项目,并将编译结果放到指定的地方。

镜像用的是 maven:3-jdk-8,后缀的 8 表示java版本。

bash
docker run --rm -it \
        -v ./maven/settings.xml:/usr/share/maven/ref/settings-docker.xml \
        -v ./maven/repo:/usr/share/maven/ref/repository \
        -v ./erp/src/jshERP-boot:/app \
        -w /app \
        maven:3-jdk-8 mvn -s /usr/share/maven/ref/settings-docker.xml clean package -Dmaven.test.skip=true

if [ "$?" = 0 -a -f ./erp/src/jshERP-boot/target/jshERP.jar ]; then
        mkdir -p ./erp/java
        cp -f ./erp/src/jshERP-boot/target/jshERP.jar ./erp/java/jshERP.jar
fi

Dockerfile #

适用于单模块maven项目,利用docker镜像中间层来做缓存,在下一次构建时,若pom.xml无变化,则可免去重新下载依赖的过程,从而加速构建。

Dockerfile
FROM maven:3-jdk-8 AS build-jsh-erp-jar
WORKDIR /app
COPY pom.xml .
# download all dependencies
RUN mvn dependency:go-offline
COPY src ./src
# build
RUN mvn package -Dmaven.test.skip=true

FROM openjdk:8
COPY --from=build-jsh-erp-jar /app/src/target/jshERP.jar /app/jshERP.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "/app/jshERP.jar"]

TODO:多模块maven项目,该如何有效地利用docker镜像中间层来加速下一次构建?

2025年5月9日