【问题标题】:Build multi maven modules then copy JARs inside a docker image构建多个 Maven 模块,然后在 Docker 映像中复制 JAR
【发布时间】:2018-08-28 14:57:06
【问题描述】:

我有一个用 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 的根目录下,插件会抱怨没有模块 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 创建子模块?

【问题讨论】:

    标签: maven docker


    【解决方案1】:

    如果 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 文件,可以一起使用。

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2015-06-19
      • 2017-02-11
      • 2016-12-22
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2020-11-15
      相关资源
      最近更新 更多