在父pom建筑的最后端运行docker-maven-plugin

时间:2016-06-08 10:38:15

标签: maven docker maven-plugin

我正在尝试构建包含在构建父POM文件期间构建的一组.jar文件的docker镜像。到目前为止我发现的是特定模块的单个构建创建单独的docker镜像的情况。

我的泊坞窗图片包含已部署捆绑包的Karaf。在某些时候,我实现了创建docker,但是当一切都构建完成时。我担心docker-maven-plugin可能不支持我想从bundle的特定文件夹创建docker镜像的情况(每个子项目都将其bundle部署到特定文件夹)。

现在我发现父POM包类型只支持三个阶段,但无论如何 - 所有这些阶段都在构建期间作为第一个项目运行。所以问题是:

是否可以创建泊坞窗图像

  • 包含在构建父POM项目期间构建的所有捆绑包,这些捆绑包部署到一个文件夹
  • 在运行一些父POM目标后自动

在父母POM的某些部分下面,最终可能与我的需求无关

<build>
  <plugins>
     <plugin>
       <groupId>com.spotify</groupId>
       <artifactId>docker-maven-plugin</artifactId>
       <inherited>false</inherited>
       <version>0.4.10</version>
       <configuration>
         <imageName>test1</imageName>
         <dockerDirectory>../karaf-deploy</dockerDirectory>
         <resources>
           <resource>
              <targetPath>../karaf-deploy/</targetPath>
              <directory>../karaf-deploy/</directory>
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>
     </plugin>
   </plugins>
</build>

1 个答案:

答案 0 :(得分:1)

儿童 - 父母关系只是一种特殊的依赖形式,其中儿童依赖父母。因此,在任何孩子之前,父母总是先建立。这也意味着您无法在父级中构建依赖于子级的任何内容,因为父级依赖于子级将基本上是循环依赖。

因此,如果您只想捆绑一个工件,可以将docker插件添加到该单个项目的生命周期中。但是如果你想捆绑多个工件,你应该遵循@khmarbaise的建议:

  1. 定义一个新的独立分发项目(甚至可以pom打包或使用特殊扩展名)
  2. 将分发项目作为子模块添加到现有父项
  3. 在要捆绑/ wrap / include
  4. 的任何工件上添加普通的Maven依赖项
  5. prepare-package阶段定义copy-dependencies步骤以将依赖项复制到构建目录
  6. package阶段定义docker-maven-plugin设置以捆绑复制的依赖项
  7. 如果您的分发插件可以直接从Maven中选择依赖项,请跳过步骤4。我们使用io.fabric8 docker-maven-plugin来定义汇编样式描述符,例如:

    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
        <id>all-artifacts</id>
        <dependencySets>
            <dependencySet>
                <outputDirectory>/</outputDirectory>
                <useProjectArtifact>true</useProjectArtifact>
            </dependencySet>
        </dependencySets>
    </assembly>