相关疑难解决方法(0)

如何配置Maven进行离线开发?

maven是否需要在某些时候连接到互联网才能使用它?具体意义是获取用于编译,清洁,包装等的内部maven插件?

java offline maven

108
推荐指数
5
解决办法
14万
查看次数

Maven docker缓存依赖项

我正在尝试使用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构建过程中的任何内容都会成为生成的图像的一部分.

java maven docker dockerfile

28
推荐指数
7
解决办法
2万
查看次数

如何在 Docker 中缓存 maven 依赖项

我正在处理一个具有 ~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,如: …

java maven docker

10
推荐指数
2
解决办法
1万
查看次数

--mount=type=buildkit 中的缓存

我正在尝试从 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)

maven docker dockerfile docker-build

9
推荐指数
1
解决办法
9331
查看次数

标签 统计

maven ×4

docker ×3

java ×3

dockerfile ×2

docker-build ×1

offline ×1