获取所有maven依赖项,包括插件依赖项

问题描述 投票:0回答:4

我试图让maven下载所有依赖项(编译、测试、插件等),这样我就可以避免我们的docker化构建浪费不必要的时间一遍又一遍地下载它们。

我们已经对 Maven 构建进行了 docker 化,以便我们可以从 jenkins 运行它,而无需在 jenkins 机器上安装大量构建特定的依赖项(Java、redis、maven 依赖项等)。我们的构建依赖于增量 docker 构建,仅执行实际需要重新运行的步骤。

我们的主要构建是一个 DockerFile,它有几个步骤来安装 jdk、maven 等。然后它会执行一个


COPY ./pom.xml /opt/inbot-api/pom.xml
RUN mvn dependency:copy-dependencies clean

这会将依赖项下载到本地 Maven 存储库,然后清理目标目录。

然后我们将源树复制到映像并运行完整的构建。


COPY ./src /opt/inbot-api/src
RUN mvn -e clean install

总体思路是,在干净的机器上,docker 将执行所有 RUN 步骤,但在增量构建中,它只会重新运行需要重新运行的内容。每个运行步骤之后,它都会存储一个中间图像。因此,如果 pom 文件没有更改,则无需重新运行依赖项获取步骤,因为它会产生完全相同的结果。因此,它会加载已下载的所有依赖项的缓存中间映像。这正是我们想要的。

我们的 DockerFile 还有很多内容与这里不太相关,但最终它会生成一个 docker 文件,其中包含我们编译的工件、nginx 配置以及我们可以部署到 ECS 的所有运行时依赖项。

这几乎可以工作,除了

mvn clean install
仍然在每个构建上下载额外的插件依赖项。因此,这些是复制依赖项步骤未涵盖的依赖项。

我的问题,如何让

RUN mvn dependency:copy-dependencies clean
下载所有依赖项,包括插件依赖项。我见过人们实际上做了
mvn verify clean
而不是
mvn dependency:copy-dependencies clean
,但在我们的例子中这有点慢。我想知道是否有更好的方法来做到这一点。

如果您能提供有关如何改进这一点的反馈,我将不胜感激。

更新

我现在做一个


RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline  clean

此后它仍然会使用

mvn clean install
下载更多内容。尽管有
mvn -o clean install
,但
dependency:go-offline
仍然失败。所以,看来这个插件坏了。

java docker maven
4个回答
4
投票

这对我有用,无需下载其他依赖项:

RUN mvn -B dependency:resolve dependency:resolve-plugins

1
投票

对于插件,我建议使用

mvn dependency:resolve-plugins

请参阅文档:https://maven.apache.org/plugins/maven-dependency-plugin/


0
投票

解决项目中明确提到的插件和依赖项的正确方法是:

mvn dependency:go-offline

文档:https://maven.apache.org/plugins/maven-dependency-plugin/usage.html#dependency-go-offline


-2
投票

我几乎解决了这个问题:

RUN mvn install -DskipTests dependency:resolve dependency:resolve-plugins
© www.soinside.com 2019 - 2024. All rights reserved.