maven - 构建多个 Maven 模块,然后在 Docker 镜像中复制 JAR

标签 maven docker

我有一个用 Maven 配置的多模块项目。

/myProject
  /module1
    /target
    pom.xml
  /module2
    /target
    pom.xml
  pom.xml

pom 父级正在构建子模块。

使用 com.spotify.dockerfile-maven-plugin 我想构建所有模块,构建一个 docker 镜像并复制该镜像中的所有 JAR。

pom parent
<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 放在该模块中,这适用于一个模块,但如何处理多个模块且只有 1 个 Dockerfile?

我可以用一个 mvn clean install 构建子模块,然后构建 docker 镜像吗?在父 pom 上?

也许通过仅使用 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 - 构建多个 Maven 模块,然后在 Docker 镜像中复制 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060884/

相关文章:

java - 打包后maven项目持久化不起作用

javascript - 将 WebJars 与 Maven 结合使用 - 在 Intellij 和/或 Eclipse 上

java - 如何在没有主 list 属性的情况下执行 jar?

java - Maven 构建后某些场景未加载

php - Docker、PHP PDO 和单个 MySQL 容器(无法通过容器名称连接)

macos - Mac OS X 中的 Docker 机器

Windows 7 上的 Maven-NetBeans 默认路径?

docker - 使用 docker-compose 在 Gitlab CI 中保持 docker 构建

docker - Docker记录到容器

docker - 如何使用docker_host_info过滤处于退出状态的docker容器?