我正在尝试为我的多模块项目 Dockerize Maven 构建。我有一个嵌套文件结构,其中我项目的所有模块都包含在 modules/目录中。作为构建的一部分,我想缓存依赖项,因此除非更新 POM 文件,否则容器不需要拉取依赖项(即 Java 更改不应该每次都需要拉取依赖项)。我目前通过使用每个文件的单独 Docker 命令将每个 POM 复制到构建容器中的适当目录中来实现这一点;但是,我目前大约有 10 个模块,将来可能会添加更多。我想避免在添加模块时单独复制每个 POM。我看到 COPY 支持源文件参数的通配符语法,但根本无法使其正常工作。我目前拥有的命令是:
COPY modules/*/pom.xml ./
但这似乎不能正确复制。我确信有一种方法可以复制这些文件,而无需为每个文件指定一个命令。执行此操作的正确命令是什么?非常感谢您的帮助!
最佳答案
构建特定模块时是否需要构建所有兄弟模块?如果没有,我的解决方案是仅复制所需的 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
通过从父级中删除其他模块引用,您可以构建您的项目,就好像它只有所需的模块一样。
关于java - Docker 多模块 Maven 构建 - 将所有 POM 文件复制到适当的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402441/