maven是否需要在某些时候连接到互联网才能使用它?具体意义是获取用于编译,清洁,包装等的内部maven插件?
我正在尝试使用docker自动化maven构建.我想要构建的项目花了将近20分钟来下载所有依赖项,所以我尝试构建一个可以缓存这些依赖项的docker镜像,但它似乎并没有保存它.我的Dockerfile是
FROM maven:alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD pom.xml /usr/src/app
RUN mvn dependency:go-offline
Run Code Online (Sandbox Code Playgroud)
图像构建,它确实下载了所有内容.但是,生成的图像与基本maven:alpine
图像的大小相同,因此它似乎没有缓存图像中的依赖项.当我尝试使用图像时,mvn compile
它会经历整整20分钟的重新下载所有内容.
是否可以构建一个缓存我的依赖项的maven图像,这样每次我使用图像执行构建时都不必下载它们?
我正在运行以下命令:
docker build -t my-maven .
docker run -it --rm --name my-maven-project -v "$PWD":/usr/src/mymaven -w /usr/src/mymaven my-maven mvn compile
Run Code Online (Sandbox Code Playgroud)
我的理解是,RUN
在docker构建过程中的任何内容都会成为生成的图像的一部分.
我正在处理一个具有 ~200MB 依赖项的项目,由于带宽有限,我想避免无用的上传。
当我推送我的 Dockerfile 时(我稍后会附加它),即使我没有触及 pom.xml,我也总是有大约 200MB 的上传:
FROM maven:3.6.0-jdk-8-slim
WORKDIR /app
ADD pom.xml /app
RUN mvn verify clean --fail-never
COPY ./src /app/src
RUN mvn package
ENV CONFIG_FOLDER=/app/config
ENV DATA_FOLDER=/app/data
ENV GOLDENS_FOLDER=/app/goldens
ENV DEBUG_FOLDER=/app/debug
WORKDIR target
CMD ["java","-jar","-Dlogs=/app/logs", "myProject.jar"]
Run Code Online (Sandbox Code Playgroud)
这个 Dockerfile 应该制作一个 200MB 的 fatJAR,包括所有的依赖项,这就是为什么每次都会发生 ~200MB 的上传。我想要实现的是构建一个包含所有依赖项的层,并“告诉”打包阶段不要将依赖项 JAR 包含到 fatJAR 中,而是在给定目录中搜索它们。
我想构建一个mvn dependency:copy-dependencies
在构建过程之前执行的脚本,然后将目录复制到容器中;然后构建一个“非胖”JAR,其中所有这些依赖项仅链接而不实际复制到其中。
这可能吗?
编辑:
我发现容器的 Maven 本地存储库位于/root/.m2
. 所以我结束了制作一个非常简单的脚本,如下所示:
构建Docker.sh
mvn verify -clean --fail-never
mv ~/.m2 ~/git/myProjectRepo/.m2
sudo docker build -t myName/myProject:"$1"
Run Code Online (Sandbox Code Playgroud)
并编辑Dockerfile,如: …
我正在尝试从 docker 容器中获取 Maven 离线构建。我已经启用了 buildkit。我已经运行mvn dependency:go-offline -s ~/checkouts/settings.xml
以缓存/root/.m2
主机的依赖项。我希望在构建 maven 项目的容器中使用它。
这是我的 Dockerfile:
#syntax=docker/dockerfile:experimental
FROM maven:3.6.1-jdk-11 AS build
WORKDIR /
COPY . /
RUN --mount=type=cache,target=/root/.m2 mvn -o install
FROM scratch
COPY --from=build /admin/admin-
rest/target/admin-rest.war /webapps/ROOT.war
Run Code Online (Sandbox Code Playgroud)
当我尝试使用docker build
此 Dockerfile 时,出现以下错误:
插件 org.codehaus.mojo:build-helper-maven-plugin:3.0.0 或其依赖项之一无法解析:无法在离线模式下访问中心 ( https://repo.maven.apache.org/maven2 ) 和工件 org.codehaus.mojo:build-helper-maven-plugin:jar:3.0.0 之前没有从它下载。-> [帮助 1]
我的 Docker 版本:
Client:
Version: 18.09.6
API version: 1.39
Go version: go1.10.8
Git commit: 481bc77
Built: Sat May 4 02:35:57 2019
OS/Arch: linux/amd64
Experimental: …
Run Code Online (Sandbox Code Playgroud)