我有一个配置了maven的多模块项目。
/myProject
/module1
/target
pom.xml
/module2
/target
pom.xml
pom.xml
pom父级正在构建子模块。
使用 com.spotify.dockerfile-maven-plugin 我要构建所有模块,构建docker映像并复制该映像中的所有JAR。
pom父母
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>myTest</artifactId>
<name>test</name>
<version>0.0.1</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
</project>
如果我将Dockerfile放在/ myProject的根目录下,则插件会抱怨module1没有Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} /home/xyz/jars
maven插件:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>mytest</repository>
<buildArgs>
<JAR_FILE>target/${project.artifactId}-${project.version}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
如果我将Dockerfile放在一个模块中,则对一个模块工作正常,但是如何处理多个模块而只有一个Dockerfile?
我可以在父pom上构建子模块,然后构建带有单个mvn clean install
的docker镜像吗?
也许通过仅使用pom和Dockerfile创建子模块?
答案 0 :(得分:1)
如果jar是一个可执行文件的依赖项,那么可以,您可以使用在pom.xml文件中声明的依赖项来构建该可执行文件。只要您不创建循环,Maven就应该figure out which order to build the submodules in。如您建议的那样,您想使其成为子模块而不是root pom,因为root pom是其他模块继承的父配置。只需将插件放在一个子模块(在其pom.xml中)上,然后才给它Dockerfile。
(如果您认为这是一个问题,那就是在同一个maven项目中有一个依赖于库的可执行文件,那么它与docker并没有真正的关系。您可以ask the same question about a spring boot app using libraries in the same multi-module project。从某种意义上说,就像jar将与其依赖项一起构建并复制到docker映像中。)
或者,如果您是说每个子模块的每个jar本身都是可执行文件(我不认为这样做),则可以创建多个Docker映像,每个映像均来自其自己的Dockerfile,然后可以捆绑并启动它们如果要使用docker-compose文件,请一起使用。