Docker多模块Maven构建-将所有POM文件复制到相应目录

7

我希望将我的多模块项目的maven构建Docker化。我的文件结构嵌套,所有模块都包含在modules/目录中。作为构建的一部分,我想要缓存依赖项,这样容器就不需要每次拉取依赖项,除非更新了POM文件(即Java更改不应该每次都需要拉取依赖项)。我目前是通过使用单独的Docker命令将每个POM复制到构建容器中的相应目录中来使其工作;但是,目前我大约有10个模块,并且将来可能会添加更多。我希望避免每次添加模块时都必须逐个复制每个POM。我看到COPY支持源文件参数的通配符语法,但是无法让它正常工作。我目前的命令是:

COPY modules/*/pom.xml ./

但这似乎无法正确复制。我相信有一种方法可以在不必为每个文件指定命令的情况下复制这些文件。请问应该使用什么命令来执行此操作?非常感谢您的帮助!


我现在也遇到了同样的问题。你解决了吗?有没有想过如何在不使用单独的COPY命令来处理每个pom文件的情况下解决这个问题? - Rizkallah
不好意思,我的Dockerfile仍然以相同的方式设置。 - Anthony Fabietti
1个回答

1

在构建特定模块时,是否需要构建所有兄弟模块?如果不需要,我的解决方案是仅复制所需的 POM 文件,然后在将其复制到容器中后修改父 pom.xml

RUN mv pom.xml pom.xml.org
RUN cat pom.xml.org | grep -vP '<module>(?!my-commons|my-module)' >> pom.xml
RUN mvn -pl my-commons,my-module dependency:go-offline

通过从父模块中删除其他模块的引用,您可以构建您的项目,就好像它只有所需的模块一样。


在我的 Docker 中的 Busybox 版本似乎不支持 P 选项: grep: unrecognized option: P有什么办法可以更新它吗? - fudge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接