构建多个maven模块,然后在docker镜像中复制JAR
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建多个maven模块,然后在docker镜像中复制JAR相关的知识,希望对你有一定的参考价值。
我有一个配置了maven的多模块项目。
/myProject
/module1
/target
pom.xml
/module2
/target
pom.xml
pom.xml
pom parent正在构建子模块。
使用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的根目录下,插件会抱怨模块1没有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放在该模块中但是如何处理多个模块并且只有1个Dockerfile,这对一个模块工作正常?
我可以在父pom上使用单个mvn clean install
构建子模块然后构建docker镜像吗?
也许只用pom和Dockerfile创建一个子模块?
如果jar是一个可执行文件的依赖项,那么是的,您可以构建一个可执行文件,并在其pom.xml文件中声明其依赖项。 Maven应该figure out which order to build the submodules in,只要你不创造一个循环。正如您所建议的那样,您希望将其作为子模块而不是根pom,因为根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文件。
以上是关于构建多个maven模块,然后在docker镜像中复制JAR的主要内容,如果未能解决你的问题,请参考以下文章
Gradle项目构建docker镜像(支持Gradle多模块)
源码时代Java干货分享|手把手教你用maven构建docker镜像