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

2022-09-04 23:19:00

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

我们已经对 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 cleanmvn verify cleanmvn dependency:copy-dependencies clean

我将不胜感激关于如何改进这一点的任何反馈。

更新

我现在做一个

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

之后,它仍然下载了更多的东西。尽管 .所以,这个插件似乎坏了。mvn clean installmvn -o clean installdependency:go-offline


答案 1

这适用于我,没有其他依赖项可供下载:

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

答案 2

对于我建议使用的插件mvn dependency:resolve-plugins

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


推荐